具有一个依赖于自动模块的显式模块化项目,例如在java.activation上。仍然可以使用jlink吗?
请参阅此module-info.java:
module hello {
requires java.activation;
}
然后Jlink无法添加模块:
$ jlink --module-path target/modules --add-modules hello --output target/jlink
Error: automatic module cannot be used with jlink: java.activation from file:///C:/Development/jlinkExample/target/modules/javax.activation-api-1.2.0.jar
据我了解,自动模块无论如何都将包含整个类路径,所以我猜想用jlink创建运行时映像没有好处吗? 另请参阅:What is an automatic module?
是否有可能避免此问题,也许为那些依赖项生成模块信息?
答案 0 :(得分:0)
据我了解,自动模块将包含整个 无论如何,classpath,所以我想创建一个 带有jlink的运行时图像?
否,自动模块不会包含整个类路径。实际上,未明确定义为模块(包含module-info.java
)但在 modulepath 上找到的工件被视为自动模块,以弥合显式模块和类路径代码之间的空白。
是否有可能规避此问题,也许会导致 这些依赖项的模块信息?
是的,您可以create a module-info.java
with jdeps
或使用moditect之类的插件来为模块生成模块信息并将其注入到现有的JAR中。
工件(JAR)具有明确的模块声明后,jlink
应该接受它,而不会失败。