Chúng tôi có một đại lý TeamCity (7.0.3) chạy trên máy Windows Server 2008 64 bit. Khi chúng tôi vừa mới nâng cấp các đại lý để sử dụng Java 7 (1.7.0_10) các bản xây dựng bắt đầu thất bại với stacktrace sau:tệp.separator Tùy chọn Java 7 gây ra 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)
Vấn đề dường như được gây ra bởi sự bao gồm của các "-Dfile.separator = \" tùy chọn java mà TeamCity sử dụng trong lệnh thực thi cho tác nhân. Tôi đã có thể tái tạo vấn đề bằng cách viết một lớp "Hello World" đơn giản và biên dịch nó trên hộp Windows và sau đó chạy chương trình với tùy chọn file.separator (ví dụ java -Dfile.separator = \ HelloWorld)
I không tìm thấy bất kỳ báo cáo lỗi tương tự nào. Đã ai thấy cái gì như thê chưa? Có hành vi của file.separator thay đổi trong Java 7?
Hơn nữa, tôi nhận ra rằng \ mặc định là tệp.separator cho Windows nên tôi không nghĩ rằng tác nhân thực sự cần sử dụng nó trong lệnh thực thi, tuy nhiên tôi không thể thấy cách trong TeamCity để báo cho đại lý không bao gồm nó. có khả năng làm cái này không?
Một ExceptionInInitializerError được ném để cho biết rằng một ngoại lệ xảy ra trong quá trình đánh giá bộ khởi tạo tĩnh hoặc bộ khởi tạo cho biến tĩnh (xem [đây] (http://www.cin.ufpe.br/~java/docs /langspechtml/javalang.doc.html)). Có thể bạn chỉ thiếu các khối tĩnh. – Seza
Cảm ơn, nhưng điều đó không áp dụng ở đây. Chương trình "Hello World" không thành công chỉ chứa một phương thức chính với System.out.println. – GaZ
sử dụng \\ thay thế? nhưng nếu đây là một vấn đề mới trên java 7, nó có thể là một lỗi – irreputable