2012-12-17 11 views
21

का कारण बनता है हमारे पास एक टीमसिटी (7.0.3) एजेंट 64-बिट Windows Server 2008 मशीन पर चल रहा है।file.separator Java 7 विकल्प ExceptionInInitializerError

Error occurred during initialization of VM 
java.lang.ExceptionInInitializerError 
    at java.lang.Runtime.loadLibrary0(Runtime.java:841) 
    at java.lang.System.loadLibrary(System.java:1084) 
    at java.lang.System.initializeSystemClass(System.java:1145) 
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 0 
    at java.lang.String.charAt(String.java:658) 
    at java.io.Win32FileSystem.<init>(Win32FileSystem.java:40) 
    at java.io.WinNTFileSystem.<init>(WinNTFileSystem.java:37) 
    at java.io.FileSystem.getFileSystem(Native Method) 
    at java.io.File.<clinit>(File.java:156) 
    at java.lang.Runtime.loadLibrary0(Runtime.java:841) 
    at java.lang.System.loadLibrary(System.java:1084) 
    at java.lang.System.initializeSystemClass(System.java:1145) 

समस्या "-Dfile.separator = \" के शामिल किए जाने की वजह से किया जा रहा है: हम हाल ही में एजेंट जावा 7 उपयोग करने के लिए (1.7.0_10) के लिए उन्नत जब बनाता निम्नलिखित स्टैकट्रेस साथ में नाकाम रहने के लिए शुरू कर दिया जावा विकल्प जो टीमसिटी एजेंट के लिए निष्पादन योग्य कमांड में उपयोग करता है। मैं एक साधारण "हैलो वर्ल्ड" कक्षा लिखकर और इसे विंडोज बॉक्स पर संकलित करके और फिर प्रोग्राम के साथ प्रोग्राम चलाने के लिए समस्या को पुन: उत्पन्न करने में सक्षम था। उदाहरण के लिए प्रोग्राम (उदाहरण के लिए जावा-डीफाइल.सेपरेटर = \ हैलोवर्ल्ड)

I कोई भी समान बग रिपोर्ट नहीं मिली है। किसी ने भी इस तरह से कुछ भी देखा है? जावा 7 में file.separator का व्यवहार बदल गया है?

इसके अलावा मुझे एहसास है कि \ n डिफ़ॉल्ट फ़ाइल है। विंडोज के लिए अलग-अलग, इसलिए मुझे नहीं लगता कि एजेंट को वास्तव में निष्पादन योग्य कमांड में इसका उपयोग करने की ज़रूरत है, हालांकि मैं एजेंट को बताने के लिए टीमसिटी में कोई रास्ता नहीं देख सकता इसे शामिल नहीं करना है। क्या इसे करना संभव है?

+0

एक अपवाद इन्इंस्टाइज़रइज़र त्रुटि यह इंगित करने के लिए फेंक दिया गया है कि एक स्थैतिक प्रारंभकर्ता के मूल्यांकन के दौरान एक अपवाद हुआ या स्थिर चर के लिए प्रारंभकर्ता (देखें [यहां] (http://www.cin.ufpe.br/~java/docs /langspechtml/javalang.doc.html))। शायद आप स्थिर ब्लॉक की कमी कर रहे हैं। – Seza

+0

धन्यवाद, लेकिन यह यहां लागू नहीं होता है। "हैलो वर्ल्ड" प्रोग्राम जो विफल रहता है केवल System.out.println के साथ एक मुख्य विधि है। – GaZ

+0

इसके बजाय \\ का उपयोग करें? लेकिन अगर यह जावा 7 पर एक नई समस्या है, तो यह एक बग – irreputable

उत्तर

10

ऐसा लगता है कि java.exe अब पीछे की ओर ट्रिम कर रहा है \ (बैक-स्लैश)।

मेरे पास निम्न कोड है: आयात java.lang। *;

public class test { 
    public static void main(String[] argz) { 
    for(String s : argz) { 
    System.out.println("agg=" + s + "|"); 
    } 

    System.out.println("prop=" + System.getProperty("prop") + "|"); 
    } 
} 

मैं जावा 1.7.0_07 और _10 के साथ इसे शुरू:

C:\Java\jdk1.7.0_07\bin\java.exe -cp . -Dprop=z\\ test a\\ b 
agg=a\\| 
agg=b| 
prop=z\\| 

और _10

C:\Java\jdk1.7.0_10\bin\java.exe -cp . -Dprop=z\\ test a\\ b 
agg=a| 
agg=b| 
prop=z| 

और एक और श्रृंखला:

C:\Java\jdk1.7.0_07\bin\java.exe -cp . -Dprop=z\ test a\ b 
agg=a\| 
agg=b| 
prop=z\| 

और _10

C:\Java\jdk1.7.0_10\bin\java.exe -cp . -Dprop=z\ test a\ b 
agg=a| 
agg=b| 
prop=z| 
+3

जेवीएम में एक बग की तरह दिखता है, और शायद न केवल टीमसिटी प्रभावित है। पहले अगर तर्क समाप्त होता है \ हमें उद्धरणों का उपयोग करने की आवश्यकता नहीं थी, कमांड लाइन पार्सर ने इसे सही ढंग से खा लिया। अब हमें ऐसे तर्क उद्धृत करना होगा। –

+0

छोटी जांच के लिए धन्यवाद। मैंने ओरेकल के साथ 1.7.0_10 के खिलाफ बग उठाया है, इसलिए हम देखेंगे कि (अगर कुछ भी) वहां होता है। – GaZ

+0

GaZ, क्या आप इस मुद्दे को यहां साझा करें –

12

JVM कमांड लाइन पैरामीटर -Dfile.separator=\/ (यानी, पिछड़ा और आगे स्लैश दोनों निर्दिष्ट करें) आज़माएं।

+1

ऐसा लगता है कि यह हमारे लिए समस्या को ठीक करता है। धन्यवाद! –