13

我正在尝试使用以下命令运行 jdeps:

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

我的com.demo.market.jar依赖于应用程序模块和自动模块。我将所有依赖项放在“模块”文件夹中,但出现错误:

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 会找到所有模块,而不是手动添加它们。

4

1 回答 1

8

当您执行以下操作时:

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理想情况下也是如此。
于 2017-11-27T13:28:07.610 回答