将jlink与自动模块一起使用

时间:2018-09-26 12:46:45

标签: java jigsaw jlink

具有一个依赖于自动模块的显式模块化项目,例如在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?

是否有可能避免此问题,也许为那些依赖项生成模块信息?

1 个答案:

答案 0 :(得分:0)

据我了解,自动模块将包含整个 无论如何,classpath,所以我想创建一个 带有jlink的运行时图像?

否,自动模块不会包含整个类路径。实际上,未明确定义为模块(包含module-info.java)但在 modulepath 上找到的工件被视为自动模块,以弥合显式模块和类路径代码之间的空白。

是否有可能规避此问题,也许会导致 这些依赖项的模块信息?

是的,您可以create a module-info.java with jdeps或使用moditect之类的插件来为模块生成模块信息并将其注入到现有的JAR中。

工件(JAR)具有明确的模块声明后,jlink应该接受它,而不会失败。