21

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 でエージェントにそれを含めないように指示する方法がわかりません. これを行うことは可能ですか?

4

2 に答える 2

12

JVM コマンド ライン パラメータを試してください-Dfile.separator=\/(つまり、円記号と円記号の両方を指定します)。

于 2012-12-22T11:23:25.940 に答える
10

java.exeが末尾の\(バックスラッシュ)をトリミングするようになりました。

私は次のコードを持っています:importjava.lang。*;

public class test {
  public static void main(String[] argz) { 
    for(String s : argz) {
     System.out.println("agg=" + s + "|");
    }

    System.out.println("prop=" +  System.getProperty("prop") + "|");
  }
}

Java1.7.0_07と_10から始めます。

C:\Java\jdk1.7.0_07\bin\java.exe -cp . -Dprop=z\\ test a\\ b
agg=a\\|
agg=b|
prop=z\\|

および_10

C:\Java\jdk1.7.0_10\bin\java.exe -cp . -Dprop=z\\ test a\\ b
agg=a|
agg=b|
prop=z|

そしてもう1つのシリーズ:

C:\Java\jdk1.7.0_07\bin\java.exe -cp . -Dprop=z\ test a\ b
agg=a\|
agg=b|
prop=z\|

および_10

C:\Java\jdk1.7.0_10\bin\java.exe -cp . -Dprop=z\ test a\ b
agg=a|
agg=b|
prop=z|
于 2012-12-27T13:40:50.043 に答える