web-dev-qa-db-ja.com

モジュール宣言をJARに挿入する方法は?

ソースコードを持っていないライブラリlib.jarがあるとします(または、モジュールをまだ認識していないJava以外の言語で記述されています)。 lib.jarにはmodule-info.classがなく、自動モジュールとして使用したくないので、module-info.classを挿入したいと思います。

最初に、次のコマンドを使用して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

もちろん、ダミークラスを含むディレクトリpackage1およびpackage2を作成することはできますが、より良いアプローチはありますか?

14
ZhekaKozlov

はい、これは--patch-moduleオプションで可能です。このオプションは実行時に最もよく使用されますが、コンパイル時にも機能します。

javac --patch-module <module name>=<path to jar> module-info.Java
14
ZhekaKozlov

または、生成されたmodule-info.Javaをコンパイルするには、JARの内容をディレクトリに抽出する必要もあります。

次に、出力ディレクトリ(-d)をコンテンツを抽出したディレクトリに設定してmodule-info.Javaをコンパイルします。

クレジット:-アラン

5
Naman