RuntimeException:包 jdk.internal.jimage.decompressor 在模块 jrt.fs 和模块 java.base 中
RuntimeException: Package jdk.internal.jimage.decompressor in module jrt.fs and module java.base
组件详细信息 - 使用 IntelliJ IDEA 2017.1 CE 和 jdk-9-ea+154
main() -
Set<String> set2 = Set.of("a", "b", "c");
set2.forEach(System.out::println);
模块-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)
对VM 初始化 的实现表示怀疑,我的问题是我没有包含模块jrt.fs
- 图片中它来自哪里?如何调试此类模块 inclusion/exclusion?如何进一步解决当前异常?
尝试把jrt-fs.jar从jdk9的目录中去掉。我在 IntelliJ IDEA 的项目结构中完成了它,对我来说效果很好
$JAVA_HOME/lib/jrt-fs.jar 包含编译为 JDK 8 的 "jrt" 文件系统提供程序的副本。它用于 运行 在 JDK 8 但需要访问 JDK 9 运行 次图像。
从异常来看,这个 JAR 文件,或者可能是 $JAVA_HOME/lib,确实被错误地放在了模块路径上。在顶层目录中不包含 module-info.class 的 JAR 文件被视为自动模块,因此这就是异常消息中包含 "module jrt.fs" 的原因。该异常基本上只是意味着由于将 jrt-fs.jar 放在模块路径上,您最终得到了包含 jdk.internal.jimage.decompressor 包(以及许多其他包)的两个模块。
我在 Manjaro Linux 上遇到了同样的问题,而它在 windows 上运行良好。查看差异,很明显 javafx 11 包安装到 /lib/jvm/java-11-openjdk/lib,然后我将其设置为 PATH_TO_FX。这似乎是问题所在,因为 jrt-fs.jar 在同一个文件夹中。
我将所有文件从 fx 移动到一个单独的文件夹,然后将其设置为 PATH_TO_FX。现在可以正常使用了。
在 Eclipse 中,更改 Eclipse 工作区或删除工作区文件夹中的 .metadata 文件夹对我有用。
我不知道是什么修复了它,但如果我不得不猜测它可能是 .metadata 文件夹中的某些东西导致了异常。
删除 .metadata 文件夹,然后重新启动 eclipse。
我遇到了 Spring Toolsuite 4 的这个问题,元数据包含有关工作区中当前项目的信息,以及常见的 Eclipse 设置,如字体、代码样式、运行 配置设置,有时还包含有关使用的模块、eclipse 插件和用于 eclipse 日志错误的 eclipse 日志文件等
它不包含有价值的项目信息。
如果手动删除或更改此文件夹,eclipse 会将此目录视为新的工作区。您必须再次导入现有项目,然后就完成了。
如果您想保留您的字体、代码样式等,您可以为新工作区导出/导入这些首选项或创建 .metadata 的备份。
在我的例子中,当我删除 [=20] 时,它适用于模块 jrt.fs 和模块 java.base 中的上述问题 Package jdk.internal.jimage.decompressor =].metadata 文件夹,再次导入项目,设置 运行 配置,一切开始工作。
要解决此问题,请按照以下步骤操作。
1- 右键单击您的 class。
2 - 运行 AS-> 运行 配置
3.点击主->
单击浏览选项并在项目中选择您的项目名称。
单击“应用”按钮,处理完成后单击 运行 按钮。
我在 Arch Linux 下遇到了同样的错误。包 java-openjfx
将其库安装到 openjdk
的 lib 目录中,这似乎会导致问题。
我找到了一个解决方法,即不添加整个 lib 目录,而是只添加所需的库。
在项目结构 > 库 > + > Java > /usr/lib/jvm/default/lib > select 需要的库(按住 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
对于我的项目,仅将控件添加为模块就足够了,但需要基本路径和图形才能将其添加到 运行。
我在 Mac Eclipse 版本:2020-09 (4.17.0)
上遇到了同样的问题
每当我尝试 运行 我现有的配置时,我都会收到该错误。
我尝试了各种解决方法,但没有任何效果。
所以我创建了一个新配置:
- 打开包含 main() 方法的文件。
- 来自 运行 菜单 select “运行 作为 >> Java 应用程序”
那个 运行 好的。这样做的好处是它不会修改您的 JDK 安装。
删除 workspace
文件夹中的 .metadata
文件夹对我有效。
(我正在使用 Windows 和 Eclipse 2021-06 (4.20.0))
组件详细信息 - 使用 IntelliJ IDEA 2017.1 CE 和 jdk-9-ea+154
main() -
Set<String> set2 = Set.of("a", "b", "c");
set2.forEach(System.out::println);
模块-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)
对VM 初始化 的实现表示怀疑,我的问题是我没有包含模块jrt.fs
- 图片中它来自哪里?如何调试此类模块 inclusion/exclusion?如何进一步解决当前异常?
尝试把jrt-fs.jar从jdk9的目录中去掉。我在 IntelliJ IDEA 的项目结构中完成了它,对我来说效果很好
$JAVA_HOME/lib/jrt-fs.jar 包含编译为 JDK 8 的 "jrt" 文件系统提供程序的副本。它用于 运行 在 JDK 8 但需要访问 JDK 9 运行 次图像。
从异常来看,这个 JAR 文件,或者可能是 $JAVA_HOME/lib,确实被错误地放在了模块路径上。在顶层目录中不包含 module-info.class 的 JAR 文件被视为自动模块,因此这就是异常消息中包含 "module jrt.fs" 的原因。该异常基本上只是意味着由于将 jrt-fs.jar 放在模块路径上,您最终得到了包含 jdk.internal.jimage.decompressor 包(以及许多其他包)的两个模块。
我在 Manjaro Linux 上遇到了同样的问题,而它在 windows 上运行良好。查看差异,很明显 javafx 11 包安装到 /lib/jvm/java-11-openjdk/lib,然后我将其设置为 PATH_TO_FX。这似乎是问题所在,因为 jrt-fs.jar 在同一个文件夹中。
我将所有文件从 fx 移动到一个单独的文件夹,然后将其设置为 PATH_TO_FX。现在可以正常使用了。
在 Eclipse 中,更改 Eclipse 工作区或删除工作区文件夹中的 .metadata 文件夹对我有用。
我不知道是什么修复了它,但如果我不得不猜测它可能是 .metadata 文件夹中的某些东西导致了异常。
删除 .metadata 文件夹,然后重新启动 eclipse。
我遇到了 Spring Toolsuite 4 的这个问题,元数据包含有关工作区中当前项目的信息,以及常见的 Eclipse 设置,如字体、代码样式、运行 配置设置,有时还包含有关使用的模块、eclipse 插件和用于 eclipse 日志错误的 eclipse 日志文件等
它不包含有价值的项目信息。
如果手动删除或更改此文件夹,eclipse 会将此目录视为新的工作区。您必须再次导入现有项目,然后就完成了。
如果您想保留您的字体、代码样式等,您可以为新工作区导出/导入这些首选项或创建 .metadata 的备份。
在我的例子中,当我删除 [=20] 时,它适用于模块 jrt.fs 和模块 java.base 中的上述问题 Package jdk.internal.jimage.decompressor =].metadata 文件夹,再次导入项目,设置 运行 配置,一切开始工作。
要解决此问题,请按照以下步骤操作。 1- 右键单击您的 class。 2 - 运行 AS-> 运行 配置 3.点击主-> 单击浏览选项并在项目中选择您的项目名称。 单击“应用”按钮,处理完成后单击 运行 按钮。
我在 Arch Linux 下遇到了同样的错误。包 java-openjfx
将其库安装到 openjdk
的 lib 目录中,这似乎会导致问题。
我找到了一个解决方法,即不添加整个 lib 目录,而是只添加所需的库。
在项目结构 > 库 > + > Java > /usr/lib/jvm/default/lib > select 需要的库(按住 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
对于我的项目,仅将控件添加为模块就足够了,但需要基本路径和图形才能将其添加到 运行。
我在 Mac Eclipse 版本:2020-09 (4.17.0)
上遇到了同样的问题每当我尝试 运行 我现有的配置时,我都会收到该错误。 我尝试了各种解决方法,但没有任何效果。
所以我创建了一个新配置:
- 打开包含 main() 方法的文件。
- 来自 运行 菜单 select “运行 作为 >> Java 应用程序”
那个 运行 好的。这样做的好处是它不会修改您的 JDK 安装。
删除 workspace
文件夹中的 .metadata
文件夹对我有效。
(我正在使用 Windows 和 Eclipse 2021-06 (4.20.0))