2017-10-03 9 views
7

의 차이는모듈 선언에서 정적 모듈 문을 필요로를 필요로 무엇입니까? 예를 들어의 차이점은 무엇입니까

는 :

module bar { 
    requires java.compiler; 
    requires static java.base; 
} 
+3

[Java 9 모듈 시스템에서 선택적 종속성을 지원합니까?] (https://stackoverflow.com/questions/39900460/does-the-java-9-module-system-support-optional- dependencies) – ZhekaKozlov

+1

@ ZhekaKozlov 중복 투표를지지하지만. 그러나 링크 된 게시물이 둘 사이에 * 차이점이 있는지 확실하지 않습니다. 어쨌든, 나는 또한이 질문의 주된 동기는'require' 지시자 자체의'정적'수정 자에 대해서 알 수 있다고 믿는다. – nullpointer

+1

나는 이것을 중복으로 생각하지 않는다. 두 가지 질문이 같은 주제를 다루는 반면, 서로 다른 각도를 가지고 있습니다. 이 질문은 구문을 검색하는 사람들에 의해 발견 될 것이며, 다른 하나는 종속성을 선택적으로 만들 필요가있는 사람들에 의해 발견 될 것입니다. – Nicolai

답변

7

requires 절은 컴파일 및 실행시 필요한 모듈이 필요함을 나타냅니다. 따라서 module resolution (모듈 디스크립터가 처리되고 종속성이 해결되는 단계) 동안 모듈 시스템에서 이러한 절을 발견하면 관찰 가능한 모듈 (JDK의 모듈과 모듈 경로)의 유니버스를 검색하고 오류를 throw합니다. 모듈을 찾지 못했습니다.

requires static 절은 a dependency that is optional at run time을 표현한다. 이는 컴파일시 모듈 시스템이 위에서 설명한대로 정확하게 동작 함을 의미합니다.

런타임에서는 실행시에 대부분 requires static 절이 무시됩니다. 하나를 만날 경우 해결되지 않습니다. 즉, 관찰 가능한 모듈이 requires static으로 만 참조되는 경우 모듈 그래프에 표시되지 않습니다. 처음에는 조금 놀랄 수 있습니다. 반면, 모듈이 어떤 다른 방법으로 (다른 모듈에 의해 요구되는 에 의해 요구되는) 그래프로 만들면, 그것에 의존적 인 모든 모듈은 read이 될 수 있습니다.

3

둘 사이의 가장 큰 차이는

requires static foo.module; 

경우 의존성 컴파일, 동안 정적 위상 필수이지만에 선택적 있다는 동적 단계, 실행 중 다른 한편으로

requires bar.module; 

모듈이 컴파일 시간과 런타임 모두에서 이름에 따라 다른 모듈 ()에 종속된다는 것을 선언하기 위해 추가되었습니다.