2017-11-03 3 views
5

이 코드는 Github project을 사용하여 Java 9의 새로운 모듈러 기능에 노출되었습니다. 프로젝트에 종속성을 추가하고 기본 이미지를 빌드하고 싶습니다. 나는 pom.xml 파일에 새로운 의존성을 추가하고,이 module-info.java에 문을 필요로 추가 할 때, 나는 받는다는-JLINK - 플러그인에서 다음과 같은 오류가 발생합니다 :maven-jlink-plugin을 사용하는 동안 maven 종속성을 추가하는 방법이 있습니까?

Error: module-info.class not found for joda.time module 

이 개념을 새로운 연결 단계를 사용하여 이미지를 배포 할 수있는 개념 증명으로 사용하려고하지만 자연스럽게 외부 종속성을 가질 수 있어야하며 maven (작업 제한)을 사용해야합니다. 모드 항아리/pom.xml 파일

... 
<dependencies> 
    <dependency> 
     <groupId>joda-time</groupId> 
     <artifactId>joda-time</artifactId> 
     <version>2.9.9</version> 
    </dependency> 
    </dependencies> 
... 

모드 항아리/module-info.java

module com.soebes.nine.jar { 
    requires java.base; 
    requires joda.time; 
    exports com.soebes.example.nine.jar; 
} 

로그에

변경 :

[INFO] --- maven-jlink-plugin:3.0.0-alpha-1:jlink (default-jlink) @ mod-jlink --- 
[INFO] Toolchain in maven-jlink-plugin: jlink [ /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/bin/jlink ] 
[INFO] The following dependencies will be linked into the runtime image: 
[INFO] -> module: com.soebes.nine.one (/Users/sebastianrestrepo/Projects/jdk9-jlink-jmod-example/maven-example/mod-1/target/jmods/com.soebes.nine.one.jmod) 
[INFO] -> module: com.soebes.nine.two (/Users/sebastianrestrepo/Projects/jdk9-jlink-jmod-example/maven-example/mod-2/target/jmods/com.soebes.nine.two.jmod) 
[INFO] -> module: com.soebes.nine.jar (/Users/sebastianrestrepo/Projects/jdk9-jlink-jmod-example/maven-example/mod-jar/target/com.soebes.nine.jar-1.0-SNAPSHOT.jar) 
[INFO] -> module: joda.time (/Users/sebastianrestrepo/.m2/repository/joda-time/joda-time/2.9.9/joda-time-2.9.9.jar) 
[ERROR] 
Error: module-info.class not found for joda.time module 
[INFO] ------------------------------------------------------------------------ 
[INFO] Reactor Summary: 
[INFO] 
[INFO] parent ............................................. SUCCESS [ 1.460 s] 
[INFO] com.soebes.nine.one ................................ SUCCESS [ 2.022 s] 
[INFO] com.soebes.nine.two ................................ SUCCESS [ 1.392 s] 
[INFO] com.soebes.nine.jar ................................ SUCCESS [ 1.388 s] 
[INFO] mod-jlink .......................................... FAILURE [ 1.061 s] 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 7.911 s 
[INFO] Finished at: 2017-11-03T15:27:35-04:00 
[INFO] Final Memory: 26M/981M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-jlink-plugin:3.0.0-alpha-1:jlink (default-jlink) on project mod-jlink: 

난 정말 감사하겠습니다 도움. 감사.

+0

로그는 나는 그가 이미 동일한을 극복하기 위해 노력하고 있습니다 당신이 뭔가 가지고 올 클로닝의 repo의 소유자를 기다리는 것이 비록 받는다는 - 예를 들어 디렉토리 – srestrepo

답변

8

이것은 not much to do with the plugin I believe입니다. 귀하의 경우 joda.time 모듈은 자동 모듈 인 것으로 보입니다.

jlink tool does not support linking of automatic modules은 클래스 경로의 임의의 내용에 의존 할 수 있기 때문에 자체 포함 된 Java 런타임의 아이디어에 위배됩니다.

그래서 아마도이 문제를 해결하는 두 가지 방법이 있습니다 : -

  • (당신이 단지를 보유하고 있지 않습니다) 일시적으로 module-info.java [그것을 위해 당신이 할 수 use jdeps tool]를 생성하고 업데이트 항아리 [이용하여 진행

  • 자바 9. (당신이 종속성을 소유) 영구적으로 컴파일 및 포장 후 자체로 module-info.class 구성 것이다 자바 (9) 자체에 항아리를 마이그레이션에서 프로젝트와 해당 컴파일 된 클래스와 jar 도구].

+2

에 MVN 깨끗한 패키지를 실행합니다. [@khmarbaise] (https://stackoverflow.com/users/296328/khmarbaise) – nullpointer

+0

빠른 응답을 보내 주셔서 감사합니다. 기존 jar에'module-info.java'를 추가하는 데 문제가 있습니다. 항아리에 자바 파일을 추가 할 수는 있지만 클래스 파일이 필요하다고 생각합니다. 그러나 컴파일러는'org.joda.time'이 존재하지 않는다고 말하기 때문에 module-info.java 파일을 컴파일하는 것처럼 보이지 않습니다. 어떤 제안? – srestrepo

+5

module-info.java를 컴파일하려면 JAR의 내용을 디렉토리로 추출해야합니다. 그런 다음 내용을 추출한 디렉토리로 설정된 출력 디렉토리 (-d)를 사용하여 module-info.java를 컴파일하십시오. 유지 보수하지 않는 JAR 파일에 대해이 작업을 수행하는 것은 당연히 조금 무리한 일이 아닙니다. 라이브러리를 유지 관리하는 사람이 명시적인 모듈로 마이그레이션하는 것이 좋습니다. –

관련 문제