Maven 聚合工程打包报错:Unable to find main class 快速解决

Maven 聚合工程打包时,Unable to find main class 是高频报错,尤其在包含工具类模块的项目中,根源很简单,解决也只要一步到位。

一、报错原因

聚合工程里,工具类模块不需要 main 启动类 ,但父工程的 pom.xml 中配置了 spring-boot-maven-plugin 插件。

这个插件的作用是打包可执行的 Spring Boot jar 包,打包时会强制扫描 main 启动类。当插件透传给无启动类的工具模块时,就会直接抛出 "找不到主类" 的错误。

二、解决方案

核心思路:将 spring-boot-maven-plugin 只配置在有启动类的业务模块中,父工程移除该插件。

  1. 修改父工程 pom.xml 直接删除或注释掉 spring-boot-maven-plugin 相关配置:

    xml

    复制代码
    <!-- 父工程pom.xml 移除以下插件配置 -->
    <!--
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                    </exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
    -->
  2. 配置业务模块 pom.xml在有 main 启动类的业务模块中,单独添加该插件:

    xml

    复制代码
    <!-- 业务模块(如service-user)的pom.xml -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!-- 可选:指定启动类全路径 -->
                    <mainClass>com.example.user.UserApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

三、验证打包

执行 Maven 打包命令:

bash

运行

复制代码
mvn clean package -DskipTests

无报错即表示配置生效,工具类模块打包为普通 jar,业务模块打包为可执行 Spring Boot jar。

总结

这个报错的核心是插件配置范围不对 ,只需让 spring-boot-maven-plugin 只服务于有启动类的业务模块,就能彻底解决问题

相关推荐
海的透彻3 小时前
dockerfile如何快速构建容器(java服务)
java·开发语言
code2cat3 小时前
Java工具篇之Gradle:用任务图组织构建与交付
java·开发语言·单元测试·gradle
后台模板学习4 小时前
大模型 Prompt 工程在电商订单系统中的踩坑记录
java·python·prompt
w_zero_one4 小时前
算法--构造
java·数据结构·算法
SL_staff4 小时前
制造业订单交付崩盘?用四层协同框架重建交付可信度(技术实践)
java·产品·全栈
SL_staff5 小时前
打破风控迭代死循环:用决策编排重构业务与技术协作链路
java·产品·全栈
Mikko76 小时前
Redis 连接数满了服务端有错误信息吗?连接数不增加却命令超时?6.2 实测连接池、超时与大 key 怎么判定
java·spring boot·redis·后端
.Bryce.6 小时前
从零到一开发技术名词大全:从需求分析到 AI Agent 工程
java·网络·人工智能·agent·需求分析·agent评测
SL_staff6 小时前
JVS-APS的7个刚性约束设计:从无限产能幻觉到可执行排产的工程实践
java·spring cloud·全栈
代码山河7 小时前
基本类型转换:自动类型转换与强制类型转换
java·学习·架构·教程·面向对象·项目