RuntimeException: 在模块 jrt.fs 和模块 java.base 中封装 jdk.internal.jimage.decompressor

新手上路,请多包涵

组件详细信息- 使用 IntelliJ IDEA 2017.1 CEjdk-9-ea+154

主要() -

 Set<String> set2 = Set.of("a", "b", "c");
set2.forEach(System.out::println);

模块信息.java

 module collection {
    requires java.base;
}

日志-

 Error occurred during initialization of VM
java.lang.RuntimeException: Package jdk.internal.jimage.decompressor in both module jrt.fs and module java.base
    at jdk.internal.module.ModuleBootstrap.fail(java.base@9-ea/ModuleBootstrap.java:699)
    at jdk.internal.module.ModuleBootstrap.boot(java.base@9-ea/ModuleBootstrap.java:329)
    at java.lang.System.initPhase2(java.base@9-ea/System.java:1928)

怀疑 VM 初始化 的实现,我的问题是我没有包含模块 jrt.fs 图片来自哪里?如何调试此类模块包含/排除?如何进一步解决当前异常?

原文由 Naman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

$JAVA_HOME/lib/jrt-fs.jar 包含编译为 JDK 8 的“jrt”文件系统提供程序的副本。它适用于在 JDK 8 上运行但需要访问 JDK 9 运行时映像的 IDE 等工具。

从异常中可以看出,这个 JAR 文件,或者可能是 $JAVA_HOME/lib,被错误地放在了模块路径上。在顶级目录中不包含 module-info.class 的 JAR 文件被视为自动模块,因此这就是异常消息中包含“module jrt.fs”的原因。该异常基本上只是意味着由于将 jrt-fs.jar 放在模块路径上,您最终得到了两个包含 jdk.internal.jimage.decompressor 包(以及许多其他包)的模块。

原文由 Alan Bateman 发布,翻译遵循 CC BY-SA 3.0 许可协议

我在 Arch Linux 下遇到了同样的错误。包 java-openjfx 将其库安装到 openjdk 的 lib 目录中,这似乎会导致问题。我找到了一种解决方法,即不添加整个 lib 目录,而是只添加所需的库。

在 project structure > Libraries > + > Java > /usr/lib/jvm/default/lib > 选择需要的库(按住 ctrl) 应该看起来像这样

然后在运行配置中相应地设置 VM 选项

    --module-path /usr/lib/jvm/java-14-openjdk/lib/javafx.base.jar:/usr/lib/jvm/java-14-openjdk/lib/javafx.controls.jar:/usr/lib/jvm/java-14-openjdk/lib/javafx.graphics.jar --add-modules=javafx.controls

对于我的项目,仅将控件添加为模块就足够了,但需要基本路径和图形才能使其运行。

原文由 me-sha 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题