2017-10-12 9 views
6

私はJava9モジュールではないサードパーティのライブラリを使用するjava9モジュールをいくつか持っていますが、これは単純なユーティリティjarです。Java9モジュールでサードパーティライブラリを使用するには?

しかし、コンパイラは自分のユーティリティからパッケージを見つけることができないと訴えます。

私のサードパーティライブラリの使用を有効にするには、module-info.javaで何をすればよいですか?

答えて

5

自動モジュールとしてライブラリを使用できます。自動モジュールとは、モジュール記述子を持たないモジュール(つまり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; 
} 
+1

ありがとうございます!面白いところは、私がそれをしたことですが、IntelliJはまだ不平を言っていました。 IDEAを再起動しても、それ以上の問題はありません。ありがとう! – igr

+0

場合によっては、モジュール記述子を導出できません。第三者のライブラリを変更せずに無効な自動名を無効にする別名を定義する方法はありますか?また、https://stackoverflow.com/questions/46501388/unable-to-derive-module-descriptor-for-auto-generated-module-names-in-java-9を参照してください。 – Stefan

+0

@Stefan jar名を変更することはできませんか? – ZhekaKozlov

2

だけでサードパーティ製の瓶(以下例えばlog4j-api-2.9.1.jar)を使用し、簡単な手順で配置しますあなたのモジュール: -

  1. jarツール

    jar --file=/path/to/your/jar/log4j-api-2.9.1.jar --describe-module 
    
    の記述コマンドを実行

    は、これはあなたに

    が見つかりませんモジュール記述子のような出力を提供します。 Derived automatic module。 2.9.1あなたのmodule-info.javaで自動

  2. @

    log4j.api、としてそのモジュール名にrequiresを宣言します - それだそれ

    module your.module { 
        requires log4j.api; 
    } 
    

関連する問題