【问题标题】:RuntimeException: Package jdk.internal.jimage.decompressor in module jrt.fs and module java.baseRuntimeException:在模块 jrt.fs 和模块 java.base 中打包 jdk.internal.jimage.decompressor
【发布时间】:2017-03-23 20:23:48
【问题描述】:

组件详情 - 使用 IntelliJ IDEA 2017.1 CEjdk-9-ea+154

main() -

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 - 图片来自哪里?如何调试此类模块的包含/排除?如何进一步解决当前的异常?

【问题讨论】:

  • 这真的很奇怪,我从来没有听说过jrt.fs。您正在运行哪个 JDK 版本(内部版本号?)?另外,尝试使用java --list-modules 查找模块。
  • @Nicolai 目前使用jdk-9-ea+154。会查看模块的详细信息。知道jrt.fs 的用途吗?可能有助于了解。

标签: java intellij-idea java-9 java-platform-module-system intellij-17


【解决方案1】:

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

在项目结构 > 库 > + > Java > /usr/lib/jvm/default/lib > 选择需要的库(按住 ctrl) should look something like this

然后在运行配置中相应地设置 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

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

【讨论】:

  • 这就是我的问题所在。我同时使用javafx.controlsjavafx.fxml。我必须添加--module-path /usr/lib/jvm/java-11-openjdk/lib/javafx.controls.jar:/usr/lib/jvm/java-11-openjdk/lib/javafx.fxml.jar:/usr/lib/jvm/java-11-openjdk/lib/javafx.graphics.jar:/usr/lib/jvm/java-11-openjdk/lib/javafx.base.jar --add-modules javafx.controls,javafx.fxml 只需先添加模块,它会在运行时警告您缺少库。如果不只是一个一个地添加它们
  • IMO 这应该是公认的解决方案:在某些环境(例如 Arch/Aur)中,JDK 和 JavaFX 库混合在同一个文件夹中并导致 OP 描述的问题。此解决方案将库保留在包管理器期望的位置,并且只会影响利用 JavaFX 的用户。有点乏味,但也可以在用户的​​ .xxxshrc 中使用临时变量进行商品化。
【解决方案2】:

我在 Manjaro Linux 上遇到了同样的问题,而它在 Windows 上运行良好。查看差异,很明显 javafx 11 包安装到 /lib/jvm/java-11-openjdk/lib 中,然后我将其设置为 PATH_TO_FX。这似乎是问题所在,因为 jrt-fs.jar 在同一个文件夹中。

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

【讨论】:

  • 这个解决方法很脏。所以现在你得到了一个不受 pacman 管理的随机目录,它将永远坐在那里?
  • 我对这个解决方案不满意,但是 pacman 包不起作用。你有更清洁的建议吗?
  • 没有了,找到了就发到这里
【解决方案3】:

$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 包(以及许多其他包)的模块。

【讨论】:

  • 那么你是如何真正解决这个问题的呢?
  • @JeremyP mv $JAVA_HOME/lib/javafx* $PATH_TO_FX。我将$PATH_TO_FX 设为$JAVA_HOME/lib 的子文件夹javafx_modules,现在它可以工作了。无论如何,我想知道为什么这不是默认值。
  • @mazunki 将该评论添加到您的答案中,我将删除我的反对票(在评论中联系我,让我知道您何时完成)。
  • 这不是我的答案,如果人们可以看到原始答案,他们也可以看到评论。无需编辑其他人的 OC。答案确实解释了为什么它不起作用,所以我认为没有理由拒绝它。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

    【讨论】:

    • 也为我工作......虽然我也无法从类加载器加载资源,可能是由于缺少文件系统模块 jrt.fs。公平地说,我还没有验证有问题的代码是否可以在任何其他 java 9 环境中工作(在 8 及更低版本中是正确的)
    【解决方案6】:

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

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

    【讨论】:

    • 考虑添加有关您的答案的更多信息,例如它为什么有效以及那些东西
    • @Reznik 我不知道为什么会这样。我只是想为可能遇到同样问题的人提供一个解决方案。标记为解决问题的答案并没有清楚地告诉您如何解决问题,它只是说明了问题的原因,至少对我来说很难理解。
    • 但是如果我不得不猜测它是关于影响程序的 .metadata 文件夹。
    • @Reznik 感谢您的建议!
    【解决方案7】:

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

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

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

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

    在我的情况下,当我删除 .metadata 文件夹时,它适用于上述 Package jdk.internal.jimage.decompressor in module jrt.fs 和 module java.base 问题,再次导入项目,设置运行配置,一切都开始工作了。

    【讨论】:

      【解决方案8】:

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

      【讨论】:

        【解决方案9】:

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

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

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

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

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

        【讨论】:

          【解决方案10】:

          删除workspace 文件夹中的.metadata 文件夹对我有用。

          (我正在使用带有 Eclipse 2021-06 (4.20.0) 的 Windows)

          【讨论】:

            猜你喜欢
            • 2017-12-14
            • 2019-07-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-08-27
            • 2022-08-09
            • 2021-09-08
            • 2021-07-02
            相关资源
            最近更新 更多