Khi tôi chạy thử nghiệm này (sử dụng jmockit và TestNG, không chắc chắn nếu có liên quan):mô-đun java.base không đọc mô-đun java.desktop
public class Test {
@Test public void test(@Mocked ProcessBuilder pb) throws IOException {
new Expectations() {{ pb.start(); result = null; }};
assertNull(m());
}
public static Process m() throws IOException {
return new ProcessBuilder("").start();
}
}
tôi nhận được ngoại lệ này:
java.lang.IllegalAccessError: class java.lang.ProcessBuilder (in module java.base) cannot access class javax.print.PrintException (in module java.desktop) because module java.base does not read module java.desktop
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java)
....
Tôi đang sử dụng build 177.
Tôi có thể chạy lại thử nghiệm bằng cách sử dụng đối số --add-reads java.base=java.desktop
và nó hoạt động tốt nhưng tôi không thực sự hiểu những gì đang xảy ra ở đây.
Tại sao tôi nhận được ngoại lệ đó?
Dự đoán của tôi sẽ là một số tương tác với các lớp đang được tải ngầm; 'PrintException' không mở rộng' IOException', và điều này * cảm thấy * giống như 'HeadlessException' không thể giải thích được khi sử dụng cái gì đó không rõ ràng liên quan đến Swing. Tôi đề nghị nộp một lỗi về sự phụ thuộc vào lớp ẩn. – chrylis
Các lớp/lọ trên đường dẫn mô-đun hay đường dẫn lớp? Có bất kỳ mô-đun nào được xác định cho mã của bạn không? –
@MichaelEaster trên đường dẫn lớp - Tôi chưa xác định bất kỳ mô-đun nào. Đó là một dự án đơn giản với một tệp pom.xml với sự phụ thuộc vào TestNG và jmockit và một tệp (lớp Test trong câu hỏi). Các pom bao gồm một argLine của '-Djdk.attach.allowAttachSelf' cho chắc chắn để cho phép jmockit để chạy. – assylias