当前位置: 首页 > 面试题库 >

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

胡浩瀚
2023-03-14
问题内容

组件详细信息 -使用 IntelliJ IDEA 2017.1 CEjdk-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)

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


问题答案:

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



 类似资料:
  • 包(crate) Rust 中,crate 是一个独立的可编译单元。具体说来,就是一个或一批文件(如果是一批文件,那么有一个文件是这个 crate 的入口)。它编译后,会对应着生成一个可执行文件或一个库。 执行 cargo new foo,会得到如下目录层级: foo ├── Cargo.toml └── src └── lib.rs 这里,lib.rs 就是一个 crate(入口),它编

  • 问题内容: 我有一个使用Java Webstart技术的项目。我决定将Java版本从8升级到9。但是,在编译时遇到以下错误: 我试图将其包含到类路径中,但仍然存在相同的问题。 问题答案: 看起来默认情况下,类路径上的代码未解析 java.jnlp (非常类似于Java EE模块 )。解决的办法是用明确添加(两者并接受参数)。 JEP 261:模块系统 或此博客文章中讨论了此选项。

  • 因此,我在工作SOAP客户机示例中使用了SOAP示例,将其放入一个文件,并尝试编译它(Debian上的Openjdk 9): 在谷歌搜索了一些之后,我发现编译和运行 作品。请参阅此视频了解一般背景:https://www.youtube.com/watch?v=y8bpKYDrF5I 现在,问题: 编译器不应该自动添加java模块吗。xml。ws?(因为它显然知道需要它)这是javax中的一个bu

  • 主要内容:实例,BEGIN 和 END 模块,实例,什么是 Perl 模块?,实例,Require 和 Use 函数,实例,实例,创建 Perl 模块,安装 Perl 模块Perl 中每个包有一个单独的符号表,定义语法为: 此语句定义一个名为 mypack 的包,在此后定义的所有变量和子程序的名字都存贮在该包关联的符号表中,直到遇到另一个 package 语句为止。 每个符号表有其自己的一组变量、子程序名,各组名字是不相关的,因此可以在不同的包中使用相同的变量名,而代表的是不同的变量。 从一个包

  • Perl 中每个包有一个单独的符号表,定义语法为: package mypack; 此语句定义一个名为 mypack 的包,在此后定义的所有变量和子程序的名字都存贮在该包关联的符号表中,直到遇到另一个 package 语句为止。 每个符号表有其自己的一组变量、子程序名,各组名字是不相关的,因此可以在不同的包中使用相同的变量名,而代表的是不同的变量。 从一个包中访问另外一个包的变量,可通过" 包

  • 问题内容: 因此,我在WorkingSoap客户端示例中使用SOAP示例,将其放入文件中,然后尝试对其进行编译(Debian上的Openjdk 9): 谷歌搜索了一些之后,我发现编译和运行为 作品。另请参见此视频的一般背景:https : //www.youtube.com/watch?v=y8bpKYDrF5I&t=20m17s 现在,问题: 编译器是否应该自动添加模块java.xml.ws?(