TeamCity(7.0.3)エージェントは、64ビットWindows Server 2008マシン上で動作しています。我々は最近のJava 7(1.7.0_10)を使用するようにエージェントをアップグレードした場合ビルドするには、次のスタックトレースに失敗しました: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 = \」を含めることによって引き起こされているように見えますTeamCityがエージェントの実行可能コマンドで使用するjavaオプション。私は単純な "Hello World"クラスを作成し、それをWindowsボックスでコンパイルし、次にfile.separatorオプション(つまりjava -Dfile.separator = \ HelloWorld)でプログラムを実行することで問題を再現することができました。
I同様のバグ報告が見つかりませんでした。誰もこれのようなものを見たことがありますか? Java 7でfile.separatorの動作が変更されましたか?
さらに私は、\ Windowsのデフォルトのfile.separatorだとわかっています。エージェントは実際に実行可能コマンドでそれを使用する必要があるとは思わないでしょうが、エージェントに伝えるためにTeamCityの方法を見ることができませんそれを含めることはありません。これは可能ですか?
ExceptionInInitializerErrorは、静的な初期化子または静的変数の初期化子の評価中に例外が発生したことを示すためにスローされます([here](http://www.cin.ufpe.br/~java/docsを参照) /langspechtml/javalang.doc.html))。たぶん静的ブロックが欠けているだけかもしれません。 – Seza
ありがとうございますが、ここでは該当しません。失敗した "Hello World"プログラムには、System.out.printlnを持つ単一のmainメソッドしか含まれていません。 – GaZ
代わりに\\を使用しますか?しかし、これがJava 7の新しい問題であれば、バグ – irreputable