将 jlink 与自动模块一起使用
Using jlink with automatic modules
我有一个依赖于自动模块的显式模块化项目;例如在 java.activation 上。 jlink 还能用吗?
查看此模块-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 创建运行时映像没有任何好处?
另请参阅:
有什么办法可以规避这个问题吗?也许为那些依赖生成一个模块-info.java?
From my understanding an automatic module would contain the whole
classpath anyway, so I guess there would be no benefit in creating a
runtime-image with jlink?
不,自动模块不会包含整个类路径。事实上,未明确定义为模块(包含 module-info.java
)但在 modulepath 上找到的工件被视为自动模块,以弥合显式模块和类路径代码。
Are there any possibilities to circumvent this issue, maybe generating
a module-info for those dependencies?
是的,您可以 or use plugins like moditect 为模块生成 module-info 并将其注入现有的 JAR。
一旦工件 (JAR) 具有明确的模块声明,jlink
应该毫无失败地接受它。
我有一个依赖于自动模块的显式模块化项目;例如在 java.activation 上。 jlink 还能用吗?
查看此模块-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 创建运行时映像没有任何好处?
另请参阅:
有什么办法可以规避这个问题吗?也许为那些依赖生成一个模块-info.java?
From my understanding an automatic module would contain the whole classpath anyway, so I guess there would be no benefit in creating a runtime-image with jlink?
不,自动模块不会包含整个类路径。事实上,未明确定义为模块(包含 module-info.java
)但在 modulepath 上找到的工件被视为自动模块,以弥合显式模块和类路径代码。
Are there any possibilities to circumvent this issue, maybe generating a module-info for those dependencies?
是的,您可以
一旦工件 (JAR) 具有明确的模块声明,jlink
应该毫无失败地接受它。