java 9第三方模块适用于IDE但不适用于jlink

该程序基于JDK 9(JPMS),使用一些第三方罐子,如Apache(poi-3.17.jar,commons-io-2.6.jar)& HikariCP(HikariCP-3.1.0.jar),当使用IDE(Intellij)时,我“需要”它们,程序运行正常.
当我尝试使用java9’jlink’获取我的个性化JRE时,我得到以下内容:

/out$jlink --module-path production --add-modules  
studyModule,java.base,java.datatransfer,java.desktop,java.logging,
java.scripting,java.sql,java.xml,java.prefs,javafx.base,
javafx.controls,javafx.fxml,javafx.graphics,javafx.media,
javafx.swing,javafx.web,jdk.jsobject,jdk.xml.dom,jdk.unsupported 
--output studyJre
Error: module-info.class not found for com.zaxxer.hikari module

/out$jlink --module-path production --add-modules   
studyModule,java.base,java.datatransfer,java.desktop,java.logging,   
java.scripting,java.sql,java.xml,java.prefs,javafx.base,
javafx.controls,javafx.fxml,javafx.graphics,javafx.media,
javafx.swing,javafx.web,jdk.jsobject,jdk.xml.dom,jdk.unsupported 
--output studyJre
Error: module-info.class not found for poi module

问题是:为什么那些带IDE的软件包工作正常?如果它们没有被模块化,那么也不应该在IDE中工作.

P.S:在使用jlink时,我将这些jar添加到“root”文件夹中.

最佳答案
请记住,jlink是一种非标准工具,它不必遵循与经典Java完全相同的规则.它的一个不同之处在于它要求所有模块都是显式的(即具有module-info.class).不支持自动模块.如果要创建自定义运行时映像,则必须将所有自动模块转换为显式模块.例如,参见this question以了解如何实现它.

转载注明原文:java 9第三方模块适用于IDE但不适用于jlink - 代码日志