Abbiamo un agente TeamCity (7.0.3) in esecuzione su un computer Windows Server 2008 64-bit. Quando di recente abbiamo aggiornato l'agente di usare Java 7 (1.7.0_10) le generazioni iniziato non riuscendo con il seguente stacktrace:file.separator L'opzione Java 7 causa 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)
Il problema sembra essere causato da l'inclusione del "-Dfile.separator = \" opzione java che TeamCity utilizza nel comando eseguibile per l'agente. Sono stato in grado di riprodurre il problema scrivendo una semplice classe "Hello World" e compilarla sulla casella di Windows e quindi eseguire il programma con l'opzione file.separator (ad esempio java -Dfile.separator = \ HelloWorld)
I non ho trovato segnalazioni di bug simili. Qualcuno ha mai visto qualcosa del genere? Il comportamento di file.separator è cambiato in Java 7?
Inoltre mi rendo conto che \ è il file.separator predefinito per Windows in ogni caso quindi non penso che l'agente abbia realmente bisogno di usarlo nel comando eseguibile, tuttavia non riesco a vedere un modo in TeamCity per dire all'agente non includerlo. È possibile farlo?
Un oggetto ExceptionInInitializerError viene generato per indicare che si è verificata un'eccezione durante la valutazione di un inizializzatore statico o dell'inizializzatore per una variabile statica (vedere [qui] (http://www.cin.ufpe.br/~java/docs /langspechtml/javalang.doc.html)). Forse ti mancano solo blocchi statici. – Seza
Grazie, ma questo non si applica qui. Il programma "Hello World" che fallisce contiene solo un singolo metodo principale con System.out.println. – GaZ
utilizza \\ invece? ma se questo è un nuovo problema su java 7, potrebbe essere un errore – irreputable