【发布时间】:2018-12-02 15:38:48
【问题描述】:
我运行了以下命令,但我得到了同样的错误:
$ jdeps --generate-module-info . --multi-release 9 libs/log4j-core-2.11.1.jar
Error: log4j-core-2.11.1.jar is a multi-release jar file but --multi-release option is not set
$ jdeps --generate-module-info . --multi-release 10 libs/log4j-core-2.11.1.jar
Error: log4j-core-2.11.1.jar is a multi-release jar file but --multi-release option is not set
$ jdeps --generate-module-info . --multi-release 11 libs/log4j-core-2.11.1.jar
Error: log4j-core-2.11.1.jar is a multi-release jar file but --multi-release option is not set
$ jdeps --generate-module-info . libs/log4j-core-2.11.1.jar
Error: log4j-core-2.11.1.jar is a multi-release jar file but --multi-release option is not set
上面的命令有什么问题?
按照其他关于我的环境的命令:
$ java --version
openjdk 10.0.2 2018-07-17
OpenJDK Runtime Environment (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.4)
OpenJDK 64-Bit Server VM (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.4, mixed mode)
$ javac --version
javac 10.0.2
$ jdeps --version
10.0.2
java-11-oracle 出现同样的错误。
【问题讨论】:
-
还有一个问题是你为什么要
generate-module-info一个已经有自己显式module-info.java类打包在jar 中的jar?毕竟是multi-release-jar。 -
这个“模块”没有模块信息,因为它是一个自动模块。但我想用 jlink 构建一个启动器并包含它(核心),除了来自 log4j 的 api 模块。
-
1.作为一个多版本的jar,它必须在
META-INF/versions目录下有一个module-info.java,因为它们已经与Java9 中的模块描述符一起引入了MRJAR。 2.你为什么将它用作自动模块而不是给定的显式模块(1)? -
因为尽管包含了
requires org.apache.logging.log4j; requires org.apache.logging.log4j.core;语句,但我收到了关于带有jlink的自动模块的错误(Error: automatic module cannot be used with jlink: org.apache.logging.log4j.core from file:///PATH_PROJECT/libs/log4j-core-2.11.1.jar。并且只有在声明requires org.apache.logging.log4j;时,jlink才有效。但是在运行时启动器我收到错误ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...。 -
也就是说,
jlink没有包含这个自动模块,并且启动器要求我在运行时包含带有log4j-core-2.11.1.jar的类路径。 log4j-api-2.11.1.jar中的模块没有问题,只有log4j-core-2.11.1.jar中的自动模块。
标签: java log4j java-9 java-11 jdeps