You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3.3.3升级后spring-boot-maven-plugin未执行求助

问题描述

将Spring Boot从2.7.14升级到3.3.3后,项目始终通过maven-jar-plugin生成Jar包,而非spring-boot-maven-plugin。生成的Jar包不含BOOT-INF目录,仅包含应用类无依赖,MANIFEST.MF显示由Maven JAR Plugin 3.4.2创建。本地运行正常,但部署到测试环境时抛出异常:

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication

已移除pom.xml中maven-jar-plugin的配置,但MANIFEST.MF仍有该插件痕迹,且pom.xml已配置spring-boot-maven-plugin的repackage和build-info执行目标及主类。

解决方案

1. 确保spring-boot-maven-plugin正确绑定到构建生命周期

maven-jar-plugin是Maven默认插件,会自动绑定到package阶段。要让spring-boot-maven-plugin的repackage目标覆盖默认Jar生成,需确保插件配置正确并绑定到对应阶段。

情况1:继承spring-boot-starter-parent(推荐)

如果项目继承了spring-boot-starter-parent,插件配置可简化为:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                        <goal>build-info</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>com.yourpackage.YourApplication</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

spring-boot-starter-parent已默认将repackage目标绑定到package阶段,无需额外指定phase。

情况2:未继承spring-boot-starter-parent

需手动指定插件的执行阶段和版本:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>3.3.3</version> <!-- 版本需与Spring Boot版本一致 -->
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>repackage</goal>
                        <goal>build-info</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>com.yourpackage.YourApplication</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

2. 排查隐藏的maven-jar-plugin配置

  • 检查父pom.xml或其他模块的pom.xml,确认是否有强制启用maven-jar-plugin的配置,若存在需移除或调整优先级。
  • 执行命令查看插件有效配置:
    mvn help:describe -Dplugin=jar -Ddetail
    
    通过输出确认是否有来自继承的maven-jar-plugin配置。

3. 清理Maven缓存与构建产物

旧构建缓存可能导致插件痕迹残留,执行以下命令彻底清理后重新构建:

mvn clean install -U
  • clean:删除target目录下所有构建产物
  • -U:强制更新快照依赖并重新下载插件

4. 验证构建结果

构建完成后,检查target目录下的Jar包:

  • 正确的可执行Jar包名称为xxx-xxx.jar,maven-jar-plugin生成的瘦Jar会被重命名为xxx-xxx.jar.original
  • 解压Jar包,确认包含BOOT-INF目录(存放依赖和应用类),且MANIFEST.MF中显示由Spring Boot Maven Plugin创建
原因说明
  • 本地运行正常:通过mvn spring-boot:run启动时,Maven会自动将所有依赖加入类路径,无需依赖Jar包内的BOOT-INF目录。
  • 测试环境报错:部署的是maven-jar-plugin生成的瘦Jar,仅包含应用类,缺少Spring Boot核心依赖,因此抛出NoClassDefFoundError。

内容的提问来源于stack exchange,提问作者enryu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 15:47:03