Điều này không còn xảy ra với các bản dựng EA hiện tại của Java 9. Các tệp lớp bây giờ luôn luôn có thể định vị ngay cả khi chúng được đóng gói trong một mô-đun.
Đây là hậu quả của việc đóng gói mô-đun của Java 9 nơi tài nguyên không được xuất không còn có sẵn thông qua API
ClassLoader
. Dưới bìa, Javassist gọi
ClassLoader.getSystemClassLoader().findResource("java/io/Serializable.class");
để giữ tập tin lớp học cho Serializable
. Sau đó nó phân tích cú pháp tệp lớp này và biểu diễn thông tin tương tự như API phản chiếu Java nhưng không tải lớp đó sao cho nó có thể được chỉnh sửa trước khi tải nó. Cho đến Java 8, tệp lớp này có thể truy cập được vì hầu hết các trình nạp lớp dựa vào việc tìm kiếm tệp lớp trước khi tải nó sao cho lệnh gọi ở trên trả lại một URL
trỏ đến tệp. Kể từ Java 9, tài nguyên của các mô-đun được đặt tên chỉ có sẵn thông qua phương thức API mới findResource(String, String)
trong đó đối số thứ hai đặt tên cho mô-đun của lớp đó.
Câu trả lời ngắn gọn là: Javassist không còn hoạt động với Java 9 nữa và không có yêu cầu nào về số
its dependant projects. Đây là một
known issue với việc triển khai Java 9 hiện tại và hy vọng sẽ được sửa trước khi phát hành.
Nguồn
2016-06-19 08:52:52