错误: 加载主类 org.springframework.boot.loader.launch.JarLauncher 时出现 LinkageError
错误信息明确提示:
log
复制
下载
错误: 加载主类时出现 LinkageError java.lang.UnsupportedClassVersionError: JarLauncher 的类文件版本是 61.0(对应 Java 17), 但当前运行的 Java 版本最高仅支持到 55.0(对应 Java 11)。
Java版本对照关系:
class file version 55.0
→ Java 11
class file version 61.0
→ Java 17这表明你的项目(或依赖的Spring Boot)是用 Java 17 编译的,但运行时环境使用的是 Java 11,导致版本不兼容。
分步解决方案
1. 检查当前Java版本
运行以下命令确认当前环境中的Java版本:
bash
复制
下载
java -version
如果输出显示
11.x.x
,说明你正在使用 Java 11。Spring Boot 3.x 及以上版本需要 Java 17+,而 Spring Boot 2.x 支持 Java 8-11。
2. 根据项目需求选择方案
根据项目依赖的Spring Boot版本,选择以下两种解决路径:
方案一:升级Java运行时到17+(推荐)
适用场景:项目基于 Spring Boot 3.x(如RuoYi-Cloud-Plus 2.3.0可能使用了Spring Boot 3)。
操作步骤:
下载并安装 JDK 17(如 Oracle JDK 17 或 OpenJDK 17)。
配置环境变量,确保终端中
java -version
显示为 17.x.x。清理项目并重新构建:
bash
复制
下载
mvn clean install重新运行启动命令:
bash
复制
下载
java -Djava.security.egd=file:/dev/./urandom -Dserver.port=9527 \-Dskywalking.agent.service_name=ruoyi-gateway \-Dskywalking.collector.backend_service=127.0.0.1:11800 \-javaagent:agent/skywalking-agent.jar \-jar target/ruoyi-gateway.jar方案二:降级Spring Boot到2.x
适用场景:必须使用 Java 11 且项目允许降级到 Spring Boot 2.x。
操作步骤:
在项目的
pom.xml
中将Spring Boot版本改为 2.7.x(兼容Java 11):xml
复制
下载
运行
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version> <!-- 使用Spring Boot 2.x最新稳定版 --> </parent>检查其他依赖(如
ruoyi-gateway
)是否兼容 Spring Boot 2.x。清理并重新构建项目:
bash
复制
下载
mvn clean install重新运行启动命令。
3. 验证SkyWalking Agent兼容性
确保你使用的
skywalking-agent.jar
版本与Java版本匹配:
SkyWalking 9.x+ 支持 Java 11-17。
如果降级到 Java 11,建议使用 SkyWalking 8.9.x(兼容性更好)。
4. 检查构建工具的Java版本配置
确保构建工具(Maven/Gradle)的编译配置与目标Java版本一致。
在 Maven 的pom.xml
中添加:xml
复制
下载
运行
<properties><maven.compiler.source>17</maven.compiler.source> <!-- 与运行时版本一致 --><maven.compiler.target>17</maven.compiler.target> </properties>
附加验证
检查Spring Boot版本:
在pom.xml
中确认Spring Boot的版本:xml
复制
下载
运行
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.5</version> <!-- 此为Spring Boot 3.x --> </parent>
如果版本是
3.x.x
,必须使用 Java 17+。如果版本是
2.x.x
,可使用 Java 8-11。
总结
根本原因:Java运行时版本(11)低于项目编译版本(17)。
解决方案:
升级Java到17,或
降级Spring Boot到2.x并保持Java 11。
根据项目实际需求选择合适的方案即可解决问题。