Mamy agenta TeamCity (7.0.3) działającego na 64-bitowym komputerze z systemem Windows Server 2008. Kiedy niedawno zmodernizowane środka do używania Java 7 (1.7.0_10) kompilacje rozpoczęła niepowodzeniem z następującym stacktrace:file.separator Opcja Java 7 powoduje wyjątek ExceptionInitializerError
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)
Problem wydaje się być spowodowane włączeniem „-Dfile.separator = \” opcja java, którą TeamCity używa w poleceniu wykonywalnym dla agenta. Udało mi się odtworzyć problem, pisząc prostą klasę "Hello World" i kompilując ją w oknie systemu Windows, a następnie uruchamiając program za pomocą opcji file.separator (np. Java -Dfile.separator = \ HelloWorld)
I nie znaleziono żadnych podobnych zgłoszeń błędów. Czy ktoś widział coś takiego? Czy zachowanie pliku file.separator zmieniło się w języku Java 7?
Ponadto zdaję sobie sprawę, że \ jest domyślnie file.separator dla Windows, więc nie sądzę, że agent naprawdę musi go użyć w poleceniu, ale nie widzę sposobu w TeamCity powiedzieć agentowi nie uwzględniać tego. Czy można to zrobić?
Wywoływany jest wyjątekInceptionInitializerError wskazujący, że wystąpił wyjątek podczas oceny statycznego inicjalizatora lub inicjalizatora dla zmiennej statycznej (patrz [tutaj] (http://www.cin.ufpe.br/~java/docs /langspechtml/javalang.doc.html)). Może brakuje ci statycznych bloków. – Seza
Dzięki, ale to nie ma tutaj zastosowania. Program "Hello World", który zawodzi, zawiera tylko jedną główną metodę z System.out.println. – GaZ
użyć \\ zamiast? ale jeśli jest to nowy problem na java 7, może to być błąd – irreputable