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

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里做两个小调整就搞定了:

  1. 明确绑定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>
    
  2. 确保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,提问作者Евгений Сурин

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:42:43