【问题标题】:jdeps command use with `--multi-release` option failedjdeps 命令与 `--multi-release` 选项一起使用失败
【发布时间】: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


【解决方案1】:

有一个带有 --multi-release 选项的bug 可以使用模块

jdeps 在非多版本 jar 上执行时失败,并且 --class-path 包含多版本 jar。 反之亦然。 在设置了适当的 --multi-release 标志并且 --class-path 包含非多版本 jar 的多版本 jar 上执行时,jdeps 失败。

总结了这个问题:

这基本上使多版本 jar 无法与模块一起使用。

【讨论】:

【解决方案2】:

JDK-8229396 修复了 jdeps --generate-module-info 选项以正确使用指定给 --multi-release 选项的版本来解析给定的多版本 JAR。此问题已在 14 中修复。请在未来几周内试用 EA 版本。

【讨论】:

    猜你喜欢
    • 2019-07-13
    • 2020-06-15
    • 2019-09-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    相关资源
    最近更新 更多