我有一个明确的模块化项目,它依赖于一个自动模块;例如java.activation。还可以使用jlink吗?
请参阅此模块信息.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 创建运行时映像没有任何好处吗?
另请参阅:什么是自动模块?
是否有可能规避此问题?也许为这些依赖项生成模块信息.java?
据我了解,自动模块将包含整个 无论如何,类路径,所以我想创建一个 带有 jlink 的运行时映像?
不,自动模块不会包含整个类路径。事实上,未显式定义为模块(包含module-info.java
(但在模块路径上找到的工件被视为自动模块,以弥合显式模块和类路径代码之间的差距。
是否有可能规避此问题,也许会产生 这些依赖项的模块信息?
是的,您可以使用jdeps
创建module-info.java
,也可以使用 moditect 等插件为模块生成模块信息并将其注入到现有 JAR 中。
一旦工件 (JAR( 具有显式模块声明,jlink
应该接受它而不会失败。