2017-10-26 18 views
2

나는 다음과 같은 프로그램을 가지고 : 나는 자동 모듈로이 프로그램을 실행하면왜 --limit-modules가 작동하지 않습니까?

package org.example; 

import com.google.common.primitives.Ints; // This is a guava class 

public class Example { 
    public static void main(String[] __) { 
     System.out.println(Ints.class); 
    } 
} 

이 모든 것이 괜찮 :

> java -p myapp.jar;guava.jar -m myapp/org.example.Example 
class com.google.common.primitives.Ints 

하지만 --limit-modules를 사용하는 경우, 프로그램은 여전히 ​​잘 실행 :

> java -p myapp.jar;guava.jar --limit-modules myapp -m myapp/org.example.Example 
class com.google.common.primitives.Ints 

이 있어야하지 뭔가 같은 :

,
java.lang.NoClassDefFoundError: com/google/common/primitives/Ints 

?

+1

나는 모듈 그래프를 계산하는 동안 모듈은 여전히 ​​해결된다고 믿는다 ... 그런데, 당신은 명령에서 그 오류를 발견하지 못했다. 'myapp.jar : guava.jar'가 아니겠습니까? (도구의 콜론, 문서의 세미 콜론) :) – nullpointer

+1

@nullpointer 나는 윈도우에있다 – ZhekaKozlov

답변

3

JEP 261 : "이 옵션의 효과는 관찰 할 수있는 모듈을 명명 된 모듈과 주 모듈 (있는 경우) 및 --add-modules 옵션을 통해 지정된 추가 모듈로 제한하는 것입니다 . "

질문에서 초기 모듈은 자동 모듈입니다. 자동 모듈은 관찰 가능한 모든 자동 모듈을 필요로하는 것처럼 "해결"됩니다. 따라서 --limit-modules myapp--limit-modules myapp,<all-automatic-modules>과 동일합니다.

+1

나는 그곳에 있다는 것을 알고 있었고, 진리의 근원을 많이 차지할 수 없었다;) 단지 궁금해서, --show-module - 해상도 '도 여기에 도움이 되니? 사용해야한다고 주장해야합니까? – nullpointer

+0

@AlanBateman'guava'는'myapp'의 전이 클로저에 있지 않습니다. 그렇다면 어떻게 작동 될 수 있습니까? – ZhekaKozlov

+0

@nullpointer 커맨드 라인에 * - add-modules *이 없다. – ZhekaKozlov