64 ビットの Windows Server 2008 マシンで実行されている TeamCity (7.0.3) エージェントがあります。最近エージェントをアップグレードして Java 7 (1.7.0_10) を使用すると、ビルドが次のスタックトレースで失敗し始めました。
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)
この問題は、TeamCity がエージェントの実行可能コマンドで使用する「-Dfile.separator=\」java オプションが含まれていることが原因のようです。簡単な「Hello World」クラスを作成して Windows ボックスでコンパイルし、file.separator オプション (つまり、java -Dfile.separator=\ HelloWorld) を指定してプログラムを実行することで、問題を再現できました。
同様のバグレポートは見つかりませんでした。誰もこのようなものを見たことがありますか?file.separator の動作は Java 7 で変更されましたか?
さらに、とにかく \ が Windows のデフォルトの file.separator であることを認識しているため、エージェントが実行可能コマンドで実際にそれを使用する必要はないと思いますが、TeamCity でエージェントにそれを含めないように指示する方法がわかりません. これを行うことは可能ですか?