Java 运行时版本与插件编译版本不兼容(java.lang.UnsupportedClassVersionError错误)
·
Caused by: java.lang.UnsupportedClassVersionError: org/springframework/boot/maven/RepackageMojo has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1 (Native Method)
at java.lang.ClassLoader.defineClass (ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass (SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass (URLClassLoader.java:467)
at java.net.URLClassLoader.access$100 (URLClassLoader.java:73)
at java.net.URLClassLoader$1.run (URLClassLoader.java:368)
at java.net.URLClassLoader$1.run (URLClassLoader.java:362)
at java.security.AccessController.doPrivileged (Native Method)
at java.net.URLClassLoader.findClass (URLClassLoader.java:361)
at org.codehaus.plexus.classworlds.realm.ClassRealm.findClassInternal (ClassRealm.java:313)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf (ClassRealm.java:432)
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass (SelfFirstStrategy.java:42)
at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass (ClassRealm.java:271)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass (ClassRealm.java:247)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass (ClassRealm.java:239)
at org.eclipse.sisu.space.URLClassSpace.loadClass (URLClassSpace.java:139)
at org.eclipse.sisu.space.NamedClass.load (NamedClass.java:46)
at org.eclipse.sisu.space.AbstractDeferredClass.get (AbstractDeferredClass.java:48)
at com.google.inject.internal.ProviderInternalFactory.provision (ProviderInternalFactory.java:86)
at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision (InternalFactoryToInitializableAdapter.java:57)
at com.google.inject.internal.ProviderInternalFactory$1.call (ProviderInternalFactory.java:67)
at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision (ProvisionListenerStackCallback.java:109)
at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision (ProvisionListenerStackCallback.java:124)
at com.google.inject.internal.ProvisionListenerStackCallback.provision (ProvisionListenerStackCallback.java:66)
at com.google.inject.internal.ProviderInternalFactory.circularGet (ProviderInternalFactory.java:62)
at com.google.inject.internal.InternalFactoryToInitializableAdapter.get (InternalFactoryToInitializableAdapter.java:47)
at com.google.inject.internal.InjectorImpl$1.get (InjectorImpl.java:1101)
at org.eclipse.sisu.inject.Guice4$1.get (Guice4.java:162)
at org.eclipse.sisu.inject.LazyBeanEntry.getValue (LazyBeanEntry.java:81)
at org.eclipse.sisu.plexus.LazyPlexusBean.getValue (LazyPlexusBean.java:51)
at org.codehaus.plexus.DefaultPlexusContainer.lookup (DefaultPlexusContainer.java:263)
at org.codehaus.plexus.DefaultPlexusContainer.lookup (DefaultPlexusContainer.java:255)
at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo (DefaultMavenPluginManager.java:494)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:114)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:342)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:330)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:213)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:175)
at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:76)
at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:163)
at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:160)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:910)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:283)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:226)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:407)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:348)
at org.codehaus.classworlds.Launcher.main (Launcher.java:47)
具体信息指出 org.springframework.boot.maven.RepackageMojo 类无法加载,是由于Java 具有向后兼容性(高版本 JVM 可运行低版本代码),但不具备向前兼容性。Java 8 运行时无法识别 Java 17 生成的字节码文件。
该错误发生在 Maven 的 spring-boot:repackage 阶段。这通常意味着项目中配置了较新版本的 Spring Boot Maven 插件(如 3.x 版本),而本地开发环境或构建环境仍停留在 Java 8。
你可以修改系统环境变量,也可以在idea中修改当前项目的环境变量,这里建议你使用后者!!!
可以让 IDEA 的终端自动切换到 JDK 1.8,这样你在终端输入 mvn -v 也会显示 1.8。
- 打开 IDEA 设置 (
Ctrl + Alt + S)。 - 找到 工具 -> 终端。
- 在右侧找到 环境变量 这一栏。
- 点击右边的
+号,添加一行:- 名称:
JAVA_HOME - 值:
D:\jdk1.8.0_181(填入你 JDK 1.8 的实际路径)
- 名称:
- 点击 应用 并 确定。
- 关键一步:关闭当前所有的终端窗口,点击
+号重新打开一个新的终端。 - 再次输入
mvn -v,你会发现 Java version 已经变成 1.8 了
如果修改环境后仍然存在问题,可能存在以下三种情况:
1.pom文件存在问题
- 打开你 的
pom.xml,搜索spring-boot,看看是不是在那里被定义了。
因为你的 spring-boot-maven-plugin 没有指定 <version>,并且你的这个子模块里缺少 <properties> 标签,导致 Maven 找不到版本号,又去中央仓库拉取了最新的 4.1.0-M4 里程碑版本,而你的 Java 8 无法运行它。
<!-- 【修复1】新增 properties 块,补充缺失的版本号变量 -->
<properties>
<spring-boot.version>2.7.18</spring-boot.version>
<java.version>1.8</java.version>
<mysql-connector-java.version>8.0.30</mysql-connector-java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<!-- 【修复2】显式指定编译插件,确保使用 Java 8 编译 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<!-- 【核心修复】必须加上 version,否则又会去拉 4.1.0-M4 报错 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
解决方案
- 补全
<properties>,明确定义 Spring Boot 和 Java 的版本。 - 给
spring-boot-maven-plugin强制加上<version>${spring-boot.version}</version>。 - (强烈建议)加上
maven-compiler-plugin确保用 Java 8 编译。
2. 检查 Maven 的 settings.xml(全局配置)
有时候公司或团队的 Maven 配置文件会强制推送依赖版本。
- 路径:
D:\maven-mvnd-1.0.2-windows-amd64\apache-maven-3.9.10\conf\settings.xml - 检查点:搜索
spring-boot,看是否有<profile>或<mirror>强制重写了版本。
3. 清理本地仓库的“脏”数据
有时候 Maven 下载依赖时出错(比如下载了一半),会导致缓存损坏,或者你之前测试时手动安装过错误版本到本地。
- 操作:
- 去你的本地仓库路径(通常在
C:\Users\你的用户名\.m2\repository\org\springframework\boot)。 - 删除
spring-boot-maven-plugin文件夹。 - 删除
spring-boot-starter-parent文件夹。 - 或者删除本地仓库的
org/springframework/boot中全部的文件夹。 - 回到 IDEA,重新点击 Maven 刷新按钮,重新
mvn clean compile。
- 去你的本地仓库路径(通常在
基本查看属于哪种情况后就可以解决问题。
更多推荐




所有评论(0)