私はJava9モジュールではないサードパーティのライブラリを使用するjava9モジュールをいくつか持っていますが、これは単純なユーティリティjarです。Java9モジュールでサードパーティライブラリを使用するには?
しかし、コンパイラは自分のユーティリティからパッケージを見つけることができないと訴えます。
私のサードパーティライブラリの使用を有効にするには、module-info.java
で何をすればよいですか?
私はJava9モジュールではないサードパーティのライブラリを使用するjava9モジュールをいくつか持っていますが、これは単純なユーティリティjarです。Java9モジュールでサードパーティライブラリを使用するには?
しかし、コンパイラは自分のユーティリティからパッケージを見つけることができないと訴えます。
私のサードパーティライブラリの使用を有効にするには、module-info.java
で何をすればよいですか?
自動モジュールとしてライブラリを使用できます。自動モジュールとは、モジュール記述子を持たないモジュール(つまりmodule-info.class
)です。しかし、あなたはこのモジュールを参照するためにどのような名前を使用すべきですか?自動モジュールの名前は、JAR名から導出されます(このJARにAutomatic-Module-Name
属性が含まれていない場合を除く)。完全なルールは非常に長く(ModuleFinder.of
のJavadocを参照)、簡単にするために、その名前からバージョンを削除し、非英数字以外の文字をドット(.
)で置き換えてください。
あなたがfoo-bar-1.2.3-SNAPSHOT.jar
を使用したい場合たとえば、あなたがmodule-info.java
に次の行を追加する必要があります。
module <name> {
requires foo.bar;
}
だけでサードパーティ製の瓶(以下例えばlog4j-api-2.9.1.jar
)を使用し、簡単な手順で配置しますあなたのモジュール: -
jar
ツール
jar --file=/path/to/your/jar/log4j-api-2.9.1.jar --describe-module
の記述コマンドを実行 は、これはあなたに
が見つかりませんモジュール記述子のような出力を提供します。 Derived automatic module。 2.9.1あなたの
module-info.java
で自動
@
log4j.api、としてそのモジュール名にrequires
を宣言します - それだそれ
module your.module {
requires log4j.api;
}
。
ありがとうございます!面白いところは、私がそれをしたことですが、IntelliJはまだ不平を言っていました。 IDEAを再起動しても、それ以上の問題はありません。ありがとう! – igr
場合によっては、モジュール記述子を導出できません。第三者のライブラリを変更せずに無効な自動名を無効にする別名を定義する方法はありますか?また、https://stackoverflow.com/questions/46501388/unable-to-derive-module-descriptor-for-auto-generated-module-names-in-java-9を参照してください。 – Stefan
@Stefan jar名を変更することはできませんか? – ZhekaKozlov