java - file.separator Java 7 选项导致 ExceptionInInitializerError

标签 java windows jvm 64-bit teamcity

我们有一个在 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)运行程序来重现该问题

我没有发现任何类似的错误报告。有没有人见过这样的事情? Java 7 中 file.separator 的行为是否发生了变化?

此外,我意识到\无论如何都是 Windows 的默认 file.separator,所以我认为代理确实不需要在可执行命令中使用它,但是我在 TeamCity 中看不到告诉代理不要的方法包括它。可以这样做吗?

最佳答案

试试 JVM 命令行参数 -Dfile.separator=\/(即同时指定反斜杠和正斜杠)。

关于java - file.separator Java 7 选项导致 ExceptionInInitializerError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13913196/

相关文章:

java - 是否有任何 API 可以将 Microsoft 交换服务器与 Java 应用程序集成以进行任务同步?

java - xmx 和 MaxRAM JVM 参数有什么区别?

java - 限制CPU使用的线程数

Java JVM 在 Aptana 和 Eclipse 中终止

java - 单个表格显示标签设置

java - Struts 2 : SEVERE: Servlet. service() for servlet 默认抛出异常 java.lang.NullPointerException

java - 创建具有名称的 bean 时出错

java - 降级到 1.7 后执行 java -version 时,我仍然看到 Java 1.8

php - 是否可以使用 PHP 创建 Windows 快捷方式?

windows - 无法使用外部 `.svnignore` 文件忽略 Subversion 中的文件