Java 코드를 통해 현재 JVM 인스턴스의 모든 모듈 목록을 얻는 방법은 무엇입니까? 가능한가? 그렇다면 어떻게? 응용 프로그램에 대한 입력으로 모듈의 항아리 또는 디렉토리를 사용Java 9에서 모든 모듈의 목록을 프로그래밍 방식으로 가져 오는 방법은 무엇입니까?
8
A
답변
10
ModuleLayer.boot().modules().stream()
.map(Module::getName)
.forEach(System.out::println);
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();
이 같은 모듈을 나열하려면 명령 줄 옵션을 쉽게 할 수있다 ModuleLayer
과 java.lang.module
의 Configuration
이 정확히 @Alan's answer으로 지적되었습니다.
부트 레이어가 유일한 레이어 인 경우에만 해당됩니다. 모듈이 다른 클래스 로더에 의해로드되면이 목록은 불완전합니다. –
물론, 코드 조각은 질문을 시작한 사람을 시작할 것입니다. 물론 VM의 모든 모듈을 열거 할 수있는 툴과 디버거를위한 API가 있습니다 (이름없는 모듈을 포함하여). 그러나 그것은 내가 의심되는 것 이상입니다. –
나는 Alan Bateman에 동의하지 않는다.이 대답은 불완전하다. 귀하의 의견을 듣고 자한다면, 익명의 모듈이나 자동 모듈을 반환하지 않습니다.이 모듈은 Java 9의 초창기에도 계속 사용되고 있습니다. –