2017-09-17 9 views

답변

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

부트 레이어가 유일한 레이어 인 경우에만 해당됩니다. 모듈이 다른 클래스 로더에 의해로드되면이 목록은 불완전합니다. –

+3

물론, 코드 조각은 질문을 시작한 사람을 시작할 것입니다. 물론 VM의 모든 모듈을 열거 할 수있는 툴과 디버거를위한 API가 있습니다 (이름없는 모듈을 포함하여). 그러나 그것은 내가 의심되는 것 이상입니다. –

+0

나는 Alan Bateman에 동의하지 않는다.이 대답은 불완전하다. 귀하의 의견을 듣고 자한다면, 익명의 모듈이나 자동 모듈을 반환하지 않습니다.이 모듈은 Java 9의 초창기에도 계속 사용되고 있습니다. –

3

, 당신은 아마도 모든 모듈 참조의 집합을 찾기 위해 findAll의 사용을 추가로 시작하고하는 ModuleFinder를 사용할 수있는이 파인더 수 위치하고 있다. 의도적으로 tweaking things에 들어갈하지 않으려면, 비록 충분해야

java -p <jarfile> --list-modules 

:

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

이 같은 모듈을 나열하려면 명령 줄 옵션을 쉽게 할 수있다 ModuleLayerjava.lang.moduleConfiguration이 정확히 @Alan's answer으로 지적되었습니다.