在Eclipse 2019-12中运行Java 17项目时遇多类异常问题
问题详情
1. VM初始化阶段报错
运行开源项目时出现VM初始化异常,报错信息如下:
Error occurred during initialization of VM java.lang.Error: ghidra.GhidraClassLoader at java.lang.ClassLoader.initSystemClassLoader(java.base@17.0.6/ClassLoader.java:1995) at java.lang.System.initPhase3(java.base@17.0.6/System.java:2246) Caused by: java.lang.ClassNotFoundException: ghidra.GhidraClassLoader at jdk.internal.loader.BuiltinClassLoader.loadClass(java.base@17.0.6/BuiltinClassLoader.java:641) at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(java.base@17.0.6/ClassLoaders.java:188) at java.lang.ClassLoader.loadClass(java.base@17.0.6/ClassLoader.java:520) at java.lang.Class.forName0(java.base@17.0.6/Native Method) at java.lang.Class.forName(java.base@17.0.6/Class.java:467) at java.lang.ClassLoader.initSystemClassLoader(java.base@17.0.6/ClassLoader.java:1981) at java.lang.System.initPhase3(java.base@17.0.6/System.java:2246)
2. Eclipse依赖解析错误
命令行构建成功,但Eclipse中所有子项目出现依赖解析错误,例如The import java.awt cannot be resolved(针对import java.awt.AWTError;),所有Java库导入及类名均报错,项目显示感叹号标记。
环境信息
- Eclipse版本:2019-12
- 项目要求:Java 17、Gradle 7.3+
- 已安装环境:Java 17、Gradle 7.5
已尝试操作
通过命令行执行以下Gradle命令可成功构建:
gradle -I gradle/support/fetchDependencies.gradle init gradle prepdev eclipse buildNatives
解决方案
针对VM初始化报错
- 检查是否存在
java.system.class.loader的JVM启动参数,若该参数被误设置为ghidra.GhidraClassLoader,会导致系统类加载器初始化时找不到对应类,需移除或修正该参数 - 确认项目启动脚本或运行配置中,是否错误指定了系统类加载器,若确实需要自定义类加载器,确保类路径中包含
ghidra.GhidraClassLoader所在的jar包
针对Eclipse依赖问题
- 升级Eclipse版本:Eclipse 2019-12发布于Java 17之前,对Java 17的支持不完善,建议升级到2021-09及以后的版本,这些版本原生支持Java 17
- 配置Java 17作为项目JRE:
- 打开
Window > Preferences > Java > Installed JREs,点击Add添加Java 17的JDK路径,设置为默认JRE - 右键项目选择
Properties > Java Build Path > Libraries,移除旧的JRE系统库,添加Java 17的JRE系统库 - 进入
Properties > Java Compiler,将Compiler compliance level设置为17,勾选Use compliance from execution environment on the 'Java Build Path'
- 打开
- 重新生成Eclipse配置:
- 命令行执行
gradle cleanEclipse eclipse,清理并重新生成Eclipse项目配置文件 - 在Eclipse中右键项目,选择
Gradle > Refresh Gradle Project,同步Gradle配置
- 命令行执行
- 验证classpath配置:检查项目的
.classpath文件,确保包含Java 17标准库的引用,例如<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"/>
内容的提问来源于stack exchange,提问作者cokachi
相关产品推荐
相关产品推荐

