2017-11-10 15 views
7

소스 코드가없는 라이브러리 lib.jar이 있다고 가정합니다 (또는 아직 모듈을 인식하지 못하는 일부 비 Java 언어로 작성되었습니다). lib.jar에는 module-info.class이없고 자동 모듈로 사용하고 싶지 않으므로 module-info.class을 주입하고 싶습니다.모듈 선언을 JAR에 삽입하는 방법은 무엇입니까?

내가 먼저 다음 명령을 module-info.java 생성 :

jdeps --generate-module-info . lib.jar 

이가 그런 일 발생한다고 가정

module lib { 
    exports package1; 
    exports package2; 
} 

그런 다음 나는 그것을 컴파일하려고를하지만 패키지 package1package2는 않기 때문에 javac 실패 존재하지 않음 :

> javac module-info.java 
module-info.java:4: error: package is empty or does not exist: package1 

물론 더미 클래스가 포함 된 package1package2 디렉토리를 만들 수 있지만 더 좋은 방법이 있습니까?

답변

6

예, --patch-module 옵션으로 가능합니다. 이 옵션은 가장 자주 실행시에 사용되지만, 또한 컴파일시에 작동합니다

또는
javac --patch-module <module name>=<path to jar> module-info.java 
+0

내가이 명령을 사용할 때, 나는 여전히 오류 얻을 : 은 javac의의 module-info.java이 module-info.java:4> : 오류 : 패키지는 비어 있거나 존재하지 않습니다 : package1 나를 위해 효과가 없을 수도있는 아이디어가 있습니까? –

+0

@TiagoSantos 패키지가 JAR에 있습니까? – ZhekaKozlov

+0

네, 모든게 잘 보입니다, 나는 그것을 nullpointer에서 위의 솔루션을 사용하여 작업 할 수 있었다. 나는 당신의 솔루션이 더 우아하고, 유일한 문제는 나의 .jars와 작동하지 않는다는 것에 동의한다 :/2 가지 다른 것들에서 시도했다. –

5

에서, module-info.java 당신은 또한 디렉토리에 JAR의 내용을 추출 할 필요가 생성 컴파일.

그런 다음 내용을 추출한 디렉토리로 출력 디렉토리 (-d)를 설정하여 module-info.java을 컴파일하십시오.

Credits :- Alan

+1

감사를 UF/모듈 info.java', 내가 받아 – ZhekaKozlov

+1

이 방법에 대해 알고하지 않았다 내 내 방식이 약간 더 우아하다고 생각하기 때문에 자신의 대답. 파일 추출은 조금 불편한 추가 단계입니다 (특히 도구의 경우). – ZhekaKozlov

+0

@ZhekaKozlov 나는 그것이 정말로 깨끗하다는 것에 동의한다. 나는 이것을 제거해서는 안된다.;) – nullpointer