2017-09-17 17 views

Trả lời

10
ModuleLayer.boot().modules().stream() 
       .map(Module::getName) 
       .forEach(System.out::println); 
+2

Điều này chỉ đúng nếu có lớp khởi động là lớp duy nhất. Nếu các mô-đun được nạp bởi các trình nạp lớp khác nhau, danh sách này sẽ không đầy đủ. –

+3

Chắc chắn, nhưng đoạn mã sẽ khiến người đó hỏi câu hỏi bắt đầu. Có tất nhiên các API cho các công cụ và trình gỡ rối để liệt kê tất cả các mô-đun trong VM, bao gồm các mô-đun chưa được đặt tên, nhưng đó là cách vượt ra ngoài những gì tôi nghi ngờ câu hỏi là về. –

+0

Tôi không đồng ý, Alan Bateman - câu trả lời này chưa hoàn thành. Như bạn gợi ý trong bình luận của bạn, điều này thậm chí không trả về các mô-đun chưa được đặt tên hoặc các mô-đun tự động, và sẽ tiếp tục rất phổ biến trong những năm đầu của Java 9. –

3

Sử dụng một lọ hoặc thư mục của module như một đầu vào cho các ứng dụng của bạn, bạn có thể có thể sử dụng một ModuleFinder để bắt đầu với và tiếp tục làm cho việc sử dụng findAll để tìm tập của tất cả các tài liệu tham khảo mô-đun mà công cụ tìm này có thể định vị.

Path dir1, dir2, dir3; 
ModuleFinder finder = ModuleFinder.of(dir1, dir2, dir3); 
Set<ModuleReference> moduleReferences = finder.findAll(); 

Đây là một cách dễ dàng có thể với các tùy chọn dòng lệnh vào danh sách các mô-đun như:

java -p <jarfile> --list-modules 

mà nên là đủ tuy nhiên, nếu bạn không muốn cố tình nhận được vào tweaking things với số ModuleLayerConfiguration của java.lang.module như được chỉ ra chính xác bởi @Alan's answer.

Các vấn đề liên quan