生成模块信息jdeps时缺少依赖项

Zim*_*ger 11 java java-platform-module-system java-9 jdeps

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

jdeps --module-path modules --generate-module-info out com.demo.market.jar
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

但是当我添加--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
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?我认为jdeps会找到所有模块而不是手动添加它们.

Nam*_*man 6

执行以下操作时:

jdeps --module-path modules --generate-module-info out com.demo.market.jar
Run Code Online (Sandbox Code Playgroud)

从目录中解析的模块是可观察的模块,在您的情况下,它们无法进入根模块集.


在问题的其他部分 -

jdeps --module-path modules --add-modules com.demo.client,com.demo.product,com.demo.logistic --generate-module-info . com.demo.market.jar
Run Code Online (Sandbox Code Playgroud)

另一方面,明确添加它们可确保模块存在于根模块集中.


作为替代方案(从JEP261#Module System,您可以尝试使用该命令

jdeps --module-path modules --add-modules=ALL-MODULE-PATH --generate-module-info out com.demo.market.jar 
Run Code Online (Sandbox Code Playgroud)

作为最后的特殊情况,在运行时和链接时,如果是ALL-MODULE-PATH,那么在相关模块路径上找到的所有可观察模块都将添加到根集.ALL-MODULE-PATH在编译时和运行时都有效.这是为Maven等构建工具提供的,它已经确保需要模块路径上的所有模块.它也是将自动模块添加到根集的便捷方式.


关于要执行的命令,请注意: -

  • 此外,jdeps问题中共享的输出-verbose:class理想地成立.