2017-11-03 14 views
5

私はこのGithub projectを使ってJava 9の新しいモジュラー機能を公開しています。私はプロジェクトに依存関係を追加してネイティブイメージを構築したいと思います。私はのpom.xmlに新しい依存関係を追加し、module-info.javaに文を必要と追加しようとすると、しかし、私は、Mavenの-JLINK-プラグインから次のエラーを取得する:maven-jlink-pluginの使用中にmaven依存関係を追加する方法はありますか?

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

私はこれを概念の証明として使用して、新しいリンクフェーズを使用してイメージを展開することができますが、自然に私は外部依存関係を持つことができる必要があり、maven(作業制約)を使用する必要があります。 MOD-jarファイル/のpom.xml

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

MOD-瓶/ 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

ログは、私はあなたが、彼はすでに同じことを克服しようとした何かを思い付くためにクローン化されたレポの所有者を待っていますけれどものmaven-exampleディレクトリ – srestrepo

答えて

8

これはnot much to do with the plugin I believeです。あなたのケースのモジュールjoda.time自動モジュールのようです。

jlink tool does not support linking of automatic modulesは、クラスパスの任意の内容に依存することができるため、自己完結型Javaランタイムの考え方に反します。

だから、おそらくこの問題を解決するには、2つの方法があります: -

  • (あなたはjarファイルを所有していない)一時的にmodule-info.java [それのためにあなたの可能性use jdeps tool]を作成し、更新するjarファイルを[使用して先に行きますJavaの9中のプロジェクト

  • のように対応するコンパイルされたクラスとjarツール](あなたは依存関係を所有)永久にそれがコンパイルされ、パッケージ化された後、それ自体でmodule-info.classで構成されますJavaの9自体にjarファイルを移行します。

+2

にMVNきれいなパッケージを実行しているからです。 [@khmarbaise](https://stackoverflow.com/users/296328/khmarbaise) – nullpointer

+0

迅速な対応に感謝します。既存のjarファイルに 'module-info.java'を追加する際に問題があります。 jarファイルにJavaファイルを追加できますが、.classファイルにする必要があると思います。しかし、コンパイラが 'org.joda.time'が存在しないと言っているので、module-info.javaファイルをコンパイルできないようです。助言がありますか? – srestrepo

+5

module-info.javaをコンパイルするには、JARの内容をディレクトリに抽出する必要があります。次に、内容を抽出したディレクトリに設定された出力ディレクトリ(-d)を指定してmodule-info.javaをコンパイルします。あなたが保守していないJARファイルに対してこれを行うことは、もちろん、少々勇気がありません。明示的なモジュールに移行するためにライブラリのメンテナーを得ることをお勧めします。 –

関連する問題