TeamCity (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 = \"의 포함에 의한 것으로 보인다 : 우리가 최근에 (1.7.0_10)를 자바 7을 사용하는 에이전트를 업그레이드 한 빌드 할 때 다음과 같은 스택 추적에 실패 시작 TeamCity가 에이전트의 실행 가능 명령에서 사용하는 java 옵션. 간단한 "Hello World"클래스를 작성하고 Windows 상자에서 컴파일 한 다음 file.separator 옵션 (예 : java -Dfile.separator = \ HelloWorld)을 사용하여 프로그램을 실행하여 문제를 재현 할 수있었습니다.
비슷한 버그 리포트를 찾지 못했습니다. 이걸 본 사람 있어요? Java 7에서 file.separator의 동작이 변경 되었습니까?
또한 \는 Windows 용 기본 file.separator입니다. 어쨌든 에이전트가 실제로 실행 가능한 명령에서 사용해야한다고 생각하지 않지만, TeamCity에서 에이전트에게 알릴 수는 없습니다. 그것을 포함하지 말라. 이것을 할 수 있습니까?
ExceptionInInitializerError는 정적 변수에 대한 정적 초기화 프로그램이나 초기화 프로그램을 평가하는 동안 예외가 발생했음을 나타 내기 위해 throw됩니다 ([here] (http://www.cin.ufpe.br/~java/docs 참조) /langspechtml/javalang.doc.html)). 어쩌면 당신은 정적 블록이 부족할 수도 있습니다. – Seza
감사합니다. 그러나 여기서는 적용되지 않습니다. 실패한 "Hello World"프로그램에는 System.out.println이있는 단일 기본 메소드 만 들어 있습니다. – GaZ
대신 \\을 사용 하시겠습니까? 그러나 이것이 Java 7의 새로운 문제라면, 버그 일 수 있습니다. – irreputable