ソースコードを持っていないライブラリ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;
}
次に、コンパイルしようとしましたが、パッケージpackage1
とpackage2
が存在しないため、javac
は失敗します。
> javac module-info.Java
module-info.Java:4: error: package is empty or does not exist: package1
もちろん、ダミークラスを含むディレクトリpackage1
およびpackage2
を作成することはできますが、より良いアプローチはありますか?
はい、これは--patch-module
オプションで可能です。このオプションは実行時に最もよく使用されますが、コンパイル時にも機能します。
javac --patch-module <module name>=<path to jar> module-info.Java
または、生成されたmodule-info.Java
をコンパイルするには、JARの内容をディレクトリに抽出する必要もあります。
次に、出力ディレクトリ(-d)をコンテンツを抽出したディレクトリに設定してmodule-info.Java
をコンパイルします。