
本文详解如何将测试专用的自定义注解与工具类打包为可复用的 maven 依赖,重点解决因误用 spring boot 插件导致的“unable to find main class”构建失败问题。
在实际开发中,我们常需将一组通用的测试辅助类(如自定义 @TestOnly 注解、Mock 工具类、断言扩展等)封装为独立模块,供多个项目以
Execution repackage of goal org.springframework.boot:spring-boot-maven-plugin:2.7.8:repackage failed: Unable to find main class
✅ 正确做法是:移除 Spring Boot 特有插件,改用标准 Maven 打包机制。
1. 清理不必要的 Spring Boot 插件
检查 pom.xml,删除以下
org.springframework.boot spring-boot-maven-plugin
⚠️ 注意:spring-boot-starter-parent 作为 parent 是允许的(它仅提供依赖版本管理),但 spring-boot-maven-plugin 必须移除——它是导致 repackage 失败的直接原因。
2. 确保模块定位清晰(推荐使用 test-jar)
由于你的类位于 src/test/java/(非生产代码),建议显式声明打包类型为 test-jar,以便下游项目能按需引用测试依赖:
jar
并在构建插件中启用 test-jar 生成(Maven 默认不打包 test 目录):
org.apache.maven.plugins maven-jar-plugin 3.3.0 test-jar
3. 下游项目引用方式
若发布为普通 jar(含 test 类),下游 pom.xml 中添加:
com.yourcompany test-utils 1.0.0 test
若使用 test-jar 打包,则需显式声明 classifier:
com.yourcompany test-utils 1.0.0 test-jar test
✅ 总结关键点
- 无需主类:纯注解/工具模块不是 Spring Boot 应用,绝不应配置 spring-boot-maven-plugin;
- 测试代码打包需主动启用:默认 mvn install 不包含 src/test/java,必须通过 maven-jar-plugin 的 test-jar 目标显式支持;
-
语义化依赖范围:始终使用
test ,避免污染生产 classpath; - 验证打包结果:执行 mvn clean install 后,检查 target/ 目录下是否生成 xxx-1.0.0.jar(含 test classes)或 xxx-1.0.0-test-jar.jar。
遵循以上步骤,即可零侵入、零运行时开销地复用测试资产,彻底规避 “Unable to find main class” 类型的构建陷阱。










