Jak uzyskać listę wszystkich modułów w bieżącej instancji JVM za pomocą kodu Java? Czy to możliwe? Jeśli tak, to w jaki sposób?Jak programowo uzyskać listę wszystkich modułów w języku Java 9?
8
A
Odpowiedz
10
ModuleLayer.boot().modules().stream()
.map(Module::getName)
.forEach(System.out::println);
3
Korzystanie słoik lub katalogu modułów jako wejście dla aplikacji, można ewentualnie użyć ModuleFinder
rozpocząć mecz i dalsze wykorzystanie w findAll
znaleźć zbiór wszystkich referencji moduł ten Finder Znajdź.
Path dir1, dir2, dir3;
ModuleFinder finder = ModuleFinder.of(dir1, dir2, dir3);
Set<ModuleReference> moduleReferences = finder.findAll();
To jest łatwo możliwe przy opcji wiersza poleceń do listy modułów jak:
java -p <jarfile> --list-modules
które powinny być wystarczające, jednak, jeśli nie chce celowo dostać się tweaking things z ModuleLayer
i Configuration
z , jak wskazano dokładnie przez @Alan's answer.
Jest to prawdziwe tylko wtedy, gdy warstwa startowa jest jedyną warstwą. Jeśli moduły są ładowane przez różne programy ładujące klasy, lista ta będzie niekompletna. –
Oczywiście, ale fragment kodu dostanie osobę zadającą pytanie. Istnieją oczywiście interfejsy API do narzędzi i debuggerów, które wyliczają wszystkie moduły w maszynie wirtualnej, w tym moduły nienazwane, ale to znacznie wykracza poza moje podejrzenia. –
Nie zgadzam się, Alan Bateman - ta odpowiedź jest niekompletna. Jak wspominasz w swoim komentarzu, nie zwraca to nawet nienazwanych modułów ani automatycznych modułów, które są i będą bardzo powszechne w początkowych latach Java 9. –