2017-09-18 6 views
-1

java.lang.Module을 Java 9에서 문자열 이름으로 얻는 방법은 무엇입니까?Java 9에서 모듈 이름을 가져 오는 방법은 무엇입니까?

예를 들어, 우리는 초기화 후 최소 java.base을 구성 부트 층에서 모듈을 얻을 수

String name = "some.module"; 
Module module = //how to get here it? 
+9

[이전 질문] (https://stackoverflow.com/questions/46287371/how-to-get-module-by-string-name-in-java-9)을 삭제하고 다시 게시하지 마십시오. 하향 회선을 우회한다. 대신 문제를 해결하는 데 필요한 것을 수정하십시오. –

답변

6

한 가지 방법이 있습니다 :

String moduleName = "my.module"; 
Module m = ModuleLayer.boot().findModule(moduleName).orElse(null); 

IMO 바람직 안전한 방법하지만, 모듈을 얻으려면 Configuration과 시스템 ClassLoader을 사용하여 모듈의 ModuleLayer을 얻은 다음 findModule

Path path = Paths.get("/path/to/your/module"); 

ModuleFinder finder = ModuleFinder.of(path); 
ModuleLayer parent = ModuleLayer.boot(); 

Configuration configuration = parent.configuration().resolve(finder, ModuleFinder.of(), Set.of(moduleName)); 
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader(); 

ModuleLayer layer = parent.defineModulesWithOneLoader(configuration, systemClassLoader); 
Module m = layer.findModule(moduleName).orElse(null); 
+0

제작 된 레이어를 수정할 수 없으면 올바르게 이해합니까? 모듈을 추가하거나 제거 할 수 없다는 뜻입니까? –

+2

@Pavel_K 한 번 생성 된 레이어는 모듈 정보의 업데이트로 수정 될 수 있습니다. 모듈의 모듈 정보를 업데이트하는 경우 모듈을 레이어에 추가/제거 할 수 있습니다. – nullpointer

+0

다음과 같은 의미입니다 - 모듈 A와 B가 있고이 두 모듈로 레이어를 만듭니다. 나중에 1)이 레이어에 새 모듈을 추가 할 수 있습니까? 2)이 레이어에서 모듈 A를 제거 하시겠습니까? 3)이 레이어의 모듈 A를 업데이트 하시겠습니까? –