
本文详解如何将测试专用的自定义注解与工具类打包为可复用的 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,删除以下
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>
⚠️ 注意:spring-boot-starter-parent 作为 parent 是允许的(它仅提供依赖版本管理),但 spring-boot-maven-plugin 必须移除——它是导致 repackage 失败的直接原因。
2. 确保模块定位清晰(推荐使用 test-jar)
由于你的类位于 src/test/java/(非生产代码),建议显式声明打包类型为 test-jar,以便下游项目能按需引用测试依赖:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
<packaging>jar</packaging> <!-- 或更精准地: --> <!-- <packaging>test-jar</packaging> -->
并在构建插件中启用 test-jar 生成(Maven 默认不打包 test 目录):
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal> <!-- 生成 test-classes.jar -->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>3. 下游项目引用方式
若发布为普通 jar(含 test 类),下游 pom.xml 中添加:
<dependency> <groupId>com.yourcompany</groupId> <artifactId>test-utils</artifactId> <version>1.0.0</version> <scope>test</scope> <!-- 关键:限定仅用于测试阶段 --> </dependency>
若使用 test-jar 打包,则需显式声明 classifier:
<dependency> <groupId>com.yourcompany</groupId> <artifactId>test-utils</artifactId> <version>1.0.0</version> <type>test-jar</type> <scope>test</scope> </dependency>
✅ 总结关键点
- 无需主类:纯注解/工具模块不是 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” 类型的构建陷阱。

















