Sự cố của bạn là do các thay đổi Project Jigsaw đã đi vào bản dựng Java 9 EA mà bạn dường như đã sử dụng. JEP 220 mô tả chúng.
Phần Removed: rt.jar
và tools.jar
mô tả này một cách chi tiết hơn nhưng Rủi ro và Giả chứa một bản tóm tắt tốt:
JDK và JRE hình ảnh sẽ, như đã nói ở trên, không còn chứa các tập tin lib/rt.jar
, lib/tools.jar
, lib/dt.jar
và các tệp jar nội bộ khác. Mã hiện có giả định rằng sự tồn tại của các tệp này có thể không hoạt động chính xác.
Vì vậy, như bạn đã quan sát, các tệp đó đã biến mất. Xem thêm:
Các tệp lớp và tài nguyên trước đây được tìm thấy trong lib/tools.jar
và chỉ hiển thị trong tệp JDK, qua trình tải lớp hệ thống hoặc trong một số trường hợp, trình nạp lớp bootstrap. Tuy nhiên, các mô-đun chứa các tệp này sẽ không được đề cập trong đường dẫn lớp ứng dụng, tức là, trong giá trị của thuộc tính hệ thống java.class.path
.
Vì vậy, các lớp học từ tools.jar
được chuyển thành mô-đun nhưng có vẻ như chúng có thể không khả dụng cho người dùng. Bạn nên sử dụng jdeps từ một xây dựng Jigsaw gần đây ...
- ... để xác định phụ thuộc mô-đun của bạn:
$jdeps -M -s $your_JAR
- ... để xác định phụ thuộc vào API JDK-nội:
jdeps -jdkinternals $your_JAR
Nếu bạn may mắn, API bạn đang sử dụng đã được xuất bản (sau đó nó sẽ không hiển thị trong phân tích thứ hai) hoặc có một lựa chọn công cộng (mà phân tích thứ hai sẽ liệt kê).Nếu không, bạn nên xem xét việc này để Jigsaw mailing list và yêu cầu giúp đỡ ở đó, lưu ý rõ ràng các API bạn đang sử dụng và những gì cho.
Điều này đúng như xa như lý thuyết đi. Vấn đề là các API "công khai" thường được cung cấp bởi các lớp trong 'tools.jar' để giữ cho dự án có thể xây dựng cho các JDK cũ hơn yêu cầu vấn đề này phải được giải quyết. –