Kotlin Spring Boot+JUnit5项目mvn clean package执行失败求助
解决Kotlin Spring Boot项目
mvn clean package失败的坑 嘿,我刚踩了和你一模一样的坑!先说说我的情况,和你完全匹配:
- 基于Kotlin开发的Spring Boot应用,用JUnit 5写测试用例
- 在IDEA里构建项目完全成功,跑所有测试也全过
- 单独执行
mvn test,测试全部正常通过;mvn spring-boot:run也能顺利启动应用 - 但一执行
mvn clean package就抛出异常,卡得我头大
问题根源&解决方案
排查了一圈才发现,问题出在Maven插件的执行顺序和Kotlin测试类的编译配置上——简单来说,就是kotlin-maven-plugin、maven-surefire-plugin(JUnit 5依赖的测试插件)和spring-boot-maven-plugin三者的配合出了小问题,导致打包阶段测试类的编译产物没有被正确识别,或者测试执行环节和打包环节的衔接出了问题。
我最后只需要在pom.xml里做两个小调整就搞定了:
明确绑定Kotlin的测试编译目标
给kotlin-maven-plugin添加test-compile的执行配置,确保它在Maven的test-compile阶段正确编译Kotlin测试类:<plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <version>${kotlin.version}</version> <executions> <execution> <id>compile</id> <goals> <goal>compile</goal> </goals> <configuration> <sourceDirs> <sourceDir>${project.src.main.kotlin}</sourceDir> </sourceDirs> </configuration> </execution> <!-- 新增这个测试编译的执行节点 --> <execution> <id>test-compile</id> <goals> <goal>test-compile</goal> </goals> <configuration> <sourceDirs> <sourceDir>${project.src.test.kotlin}</sourceDir> </sourceDirs> </configuration> </execution> </executions> </plugin>确保Surefire插件正确识别Kotlin测试类
调整maven-surefire-plugin的配置,指定测试类目录和Kotlin测试文件的命名规则,同时启用JUnit 5支持:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>${surefire.version}</version> <configuration> <testClassesDirectory>${project.build.testOutputDirectory}</testClassesDirectory> <includes> <include>**/*Test.kt</include> <include>**/*Tests.kt</include> </includes> <!-- 启用JUnit 5平台支持 --> <providerSelection>junitplatform</providerSelection> </configuration> </plugin>
为啥之前的命令都没问题?
顺便说下为啥其他命令正常,只有package失败:
- IDEA自己有一套构建逻辑,会自动处理Kotlin编译和测试的顺序,所以不会出问题
mvn test只执行到测试阶段,还没触发Spring Boot插件的打包逻辑,自然不会暴露问题mvn spring-boot:run是直接启动应用,不需要完整打包流程,所以也能正常运行- 只有
mvn clean package会走完整的编译→测试→打包全流程,这时候插件配置和执行顺序的问题就暴露出来了
如果实在赶时间,也可以临时用mvn clean package -DskipTests跳过测试打包,但不推荐这么做,毕竟测试通过是打包的核心校验环节,还是把插件配置调对更稳妥。
内容的提问来源于stack exchange,提问作者Евгений Сурин
相关产品推荐
相关产品推荐

