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

时间:2017-03-23 20:23:48

标签: java intellij-idea java-9 jigsaw intellij-17

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

main() -

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

module-info.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)

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

9 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

在Manjaro Linux上,我遇到了同样的问题,但是在Windows上却可以正常工作。查看这些差异,可以清楚地看到javafx 11软件包安装在/ lib / jvm / java-11-openjdk / lib中,然后将其设置为PATH_TO_FX。这似乎是问题所在,因为jrt-fs.jar位于同一文件夹中。

我将所有文件从fx移到了单独的文件夹,然后将其设置为PATH_TO_FX。现在可以正常工作了。

答案 2 :(得分:3)

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

在项目结构中>库> +> Java> / usr / lib / jvm / default / lib>选择所需的库(保存ctrl) should look something like this

然后在“运行配置”中相应地设置虚拟机选项

    --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

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

答案 3 :(得分:2)

尝试从jdk9目录中删除jrt-fs.jar。我在IntelliJ IDEA的Project Structure中做到了,它对我来说很好用

答案 4 :(得分:1)

我在Spring Toolsuite 4上遇到了这个问题,元数据包含有关工作区中当前项目的信息,以及常见的eclipse设置(如字体,代码样式,运行配置设置),有时还包含有关所用模块,eclipse插件和eclipse日志文件的信息。蚀日志错误等。

它不包含有价值的项目信息。

如果手动删除或更改此文件夹,则eclipse会将其视为新的工作区。您必须再次导入现有项目,然后完成。

如果要保留字体,代码样式等,则可以为新的工作区导出/导入这些首选项,或创建.metadata的备份。

在我的情况下,当我删除 .metadata 文件夹时,该问题适用于上述问题将模块jrt.fs和模块java.base 中的jdk.internal.jimage.decompressor打包,再次导入项目,设置运行配置,一切开始正常工作。

答案 5 :(得分:0)

在Eclipse中,更改Eclipse工作区或删除工作区文件夹中的.metadata文件夹对我来说是有效的。

我不知道该怎么修复,但是如果我不得不猜测它可能是导致该异常的.metadata文件夹中的某个东西。

答案 6 :(得分:0)

删除.metadata文件夹,然后重新启动eclipse。

答案 7 :(得分:0)

要解决此问题,请按照以下步骤操作。 1-右键单击您的班级。 2-运行AS->运行配置 3.单击主菜单-> 单击浏览选项,然后在项目中选择您的项目名称。 单击“应用”按钮,并在处理后单击“运行”按钮。

答案 8 :(得分:0)

在Mac Eclipse版本:2020-09(4.17.0)上,我遇到了同样的问题

每当我尝试运行现有配置时,都会出现该错误。 我尝试了各种解决方法,但没有任何效果。

所以我创建了一个新的配置:

  1. 打开包含main()方法的文件。
  2. 从“运行”菜单中选择“运行方式>> Java应用程序”

一切正常。这样做的好处是它不会修改您的JDK安装。