Tôi tin rằng bằng cách sử dụng tùy chọn --classpath
và --module-path
đồng thời là không bất hợp pháp. Có thể sử dụng cả hai cùng một lúc ngay cả khi bạn không chỉ định rõ ràng đường dẫn lớp đó mặc định vào thư mục hiện tại.
chi tiết từ tin nhắn javac -help
và javac tools docs -
--module-path <path>, -p <path>
Chỉ định nơi để tìm thấy các module ứng dụng
--class-path <path>, -classpath <path>, -cp <path>
Chỉ định nơi để tìm tập tin người dùng lớp và nhà chế biến chú thích
Nếu --class-path
, -classpath
hoặc -cp
không được chỉ định, sau đó người dùng đường dẫn lớp là thư mục hiện tại.
Sửa: Nhờ @MouseEvent, tôi có lẽ sẽ bỏ lỡ phần trong câu hỏi
Tuy nhiên, nếu không làm cho họ tự động mô-đun và chỉ cần chỉ định --class-path some.jar ngay bên cạnh --module-path, sau đó javac dường như bỏ qua claspath và ném "gói yyy không tìm thấy" và các lỗi "không tìm thấy" khác.
Nếu bạn không làm cho họ tự động, nó được xem như một Module System's unnamed module và -
Một module tên là không thể, trên thực tế, thậm chí tuyên bố một sự phụ thuộc vào các mô-đun giấu tên. Hạn chế này là cố ý, vì cho phép các tên phụ thuộc vào nội dung tùy ý của đường dẫn lớp sẽ làm cho cấu hình tin cậy là không thể.
Hơn nữa, giấu tên mô-đun xuất khẩu tất cả các gói của nó vì thế mã trong một tự động module sẽ có thể truy cập vào bất kỳ loại nào tải từ classpath.
Nhưng mô-đun tự động sử dụng các loại từ đường dẫn lớp không được hiển thị các loại đó theo mô-đun rõ ràng phụ thuộc vào nó, vì mô-đun rõ ràng không thể khai báo phụ thuộc vào mô-đun chưa đặt tên.
Nếu mã trong các mô-đun rõ ràng com.foo.app
dùng để chỉ một loại công trong com.foo.bar
, ví dụ, và chữ ký của loại hình đó đề cập đến một loại thuộc một trong các tập tin JAR vẫn trên con đường lớp, sau đó mã trong com.foo.app
sẽ không thể truy cập loại đó vì com.foo.app
không thể phụ thuộc vào mô-đun chưa đặt tên.
Điều này có thể được khắc phục bằng cách xử lý com.foo.app
như là một module tự động tạm thời để mã của nó có thể truy cập các loại từ đường dẫn lớp, cho đến khi thời gian như các tập tin JAR có liên quan trên con đường lớp có thể được coi là một mô-đun tự động hoặc chuyển đổi thành một mô-đun rõ ràng.
Có thể kết hợp cả hai, bạn có thể chia sẻ một ví dụ tối thiểu mà chúng tôi có thể xác minh không? –
* Tôi có thể hiểu rằng việc sử dụng --class-path và --module-path tại cùng một thời gian (biên dịch) là bất hợp pháp, * tại sao lại như vậy? – nullpointer
Trộn là hoàn toàn hợp pháp.Tuy nhiên, lọ mô-đun không thể tham khảo lọ không mô-đun trên classpath. Các mô-đun tự động (các mô-đun không mô-đun trên đường dẫn mô-đun) hoạt động như một cây cầu: các mô-đun lọ _can_ tham chiếu chúng, và các mô-đun tự động có thể đọc đường dẫn lớp. –