web-dev-qa-db-ja.com

generate-module-infojdeps時に依存関係がありません

次のコマンドでjdepsを実行しようとしています。

jdeps --module-path modules --generate-module-info out com.demo.market.jar

私のcom.demo.market.jarは、アプリケーションモジュールと自動モジュールの両方に依存しています。すべての依存関係を「modules」フォルダーに入れましたが、エラーが発生しました:

Error: missing dependencies
com.demo.market.platform.MarketPlace ->  com.demo.client.wholesale.Client  not found
com.demo.market.platform.MarketPlace ->  com.demo.product.api.Product      not found
com.demo.market.platform.MarketPlace ->  com.demo.product.laptop.Laptop    not found
com.demo.market.collector.ProductsCollector -> com.demo.logistic.DeliveryService not found
com.demo.market.collector.ProductsCollector -> com.demo.product.api.Product      not found

しかし、--add-modulesを追加すると正常に動作します。

jdeps --module-path modules --add-modules com.demo.client,com.demo.product,com.demo.logistic --generate-module-info out com.demo.market.jar

私は何か間違ったことをしていますか? jdepsは手動で追加するのではなく、すべてのモジュールを見つけると思いました。

11
Zimbo Rodger

以下を実行する場合:

jdeps --module-path modules --generate-module-info out com.demo.market.jar

ディレクトリから解決されるモジュールは監視可能なモジュールであり、この場合、ルートモジュールのセットに到達することはできません


質問の他の部分について-

jdeps --module-path modules --add-modules com.demo.client,com.demo.product,com.demo.logistic --generate-module-info . com.demo.market.jar

一方、それらを明示的に追加すると、モジュールがルートモジュールのセットに存在することが確認されます。


別の方法として(JEP261#Module Systemから、次のことができますコマンドを使用してみてください

jdeps --module-path modules --add-modules=ALL-MODULE-PATH --generate-module-info out com.demo.market.jar 

最後の特殊なケースとして、実行時とリンク時の両方で、がALL-MODULE-PATHの場合、すべての監視可能なモジュール関連するモジュールパスで見つかったものがルートセットに追加されます。 ALL-MODULE-PATHは、コンパイル時と実行時の両方で有効です。これは、モジュールパス上のすべてのモジュールが必要であることをすでに確認しているMavenなどのビルドツールで使用するために提供されています。ルートセットに自動モジュールを追加するのにも便利な方法です。


実行するコマンドに関して、そこに注意してください:-

  • また、質問で共有されているjdepsの出力は、理想的には-verbose:classにも当てはまります。
6
Naman