Spring Boot构建报错:pom.xml或Dockerfile存在什么问题?
问题场景
已重装Java并重置JAVA_HOME确保Maven使用正确版本,但构建时仍抛出如下错误:
#9 67.23 [ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:3.0.1:repackage (repackage) on project backend: Execution repackage of goal org.springframework.boot:spring-boot-maven-plugin:3.0.1:repackage failed: Unable to load the mojo 'repackage' in the plugin 'org.springframework.boot:spring-boot-maven-plugin:3.0.1' due to an API incompatibility: org.codehaus.plexus.component.repository.exception.ComponentLookupException: 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 60.0
本地环境信息:
zack project-portfolio >> java --version
openjdk 19.0.1 2022-10-18
OpenJDK Runtime Environment Homebrew (build 19.0.1)
OpenJDK 64-Bit Server VM Homebrew (build 19.0.1, mixed mode, sharing)
zack project-portfolio >> mvn --v
Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63)
Maven home: /usr/local/Cellar/maven/3.8.6/libexec
Java version: 19.0.1, vendor: Homebrew, runtime: /usr/local/Cellar/openjdk/19.0.1/libexec/openjdk.jdk/Contents/Home
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "13.0.1", arch: "x86_64", family: "mac".
怀疑问题出在pom.xml或Dockerfile,附上pom.xml内容:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.1</version> </parent> <groupId>com</groupId> <artifactId>backend</artifactId> <version>0.0.1-SNAPSHOT</version> <name>backend</name> <description>Backend for portfolio</description> <properties> <java.version>1.7</java.version> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <finalName>project</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
问题分析
- Spring Boot 版本与编译配置不匹配:Spring Boot 3.0.1 最低要求 Java 17,但
pom.xml里强制指定了Java 1.7作为编译源和目标版本。Spring Boot 3.x的Maven插件是用Java 17(类文件版本61.0)编译的,当Maven尝试用Java 7的规则去加载插件时,就会触发版本不兼容错误。 - Docker 环境Java版本偏低:报错里的
#9表明是Docker构建阶段出现的问题,本地用的是Java 19,但容器内的Java版本可能是Java 16(类文件版本60.0),无法识别Java 17编译的类文件。
解决步骤
1. 修正 pom.xml 的 Java 版本配置
将pom.xml中的Java版本属性改为17或19(与本地/容器Java版本一致),简化后的配置如下:
<properties> <java.version>19</java.version> </properties>
Spring Boot的父POM会自动同步maven.compiler.source和maven.compiler.target到指定的Java版本,无需单独配置。
2. 统一 Docker 容器的 Java 版本
检查Dockerfile,确保基础镜像使用Java 17及以上版本,比如:
- 官方OpenJDK镜像:
openjdk:19-jdk-slim - Spring Boot专用镜像:
springboot/openjdk:19
确保容器内的Java版本和本地环境一致,避免跨版本兼容问题。
3. 清理缓存并重新构建
执行以下命令清理Maven本地缓存,重新构建项目:
mvn clean install
如果是Docker构建,先清理本地镜像缓存再重新构建:
docker system prune -f docker build -t your-project-image .
内容的提问来源于stack exchange,提问作者number01

