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

如何让maven-assembly-plugin执行JUnit测试后再构建Jar包?

解决maven-assembly-plugin构建Jar前强制执行JUnit测试的问题

首先明确核心逻辑:Maven的默认生命周期里,test阶段本来就排在package阶段之前,所以只要保证test阶段不被跳过,assembly插件的打包操作就会在测试完成后执行。你的问题本质是之前无测试用例导致test阶段被“静默跳过”,现在要强制触发test阶段的执行(哪怕暂时没测试),后续添加测试后也能自动运行。

具体操作步骤:

  1. 添加并配置maven-surefire-plugin
    这个插件是Maven执行JUnit测试的核心组件,必须确保它正常配置且不跳过测试。在你的pom.xml的<plugins>节点中加入以下配置:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>3.2.5</version> <!-- 建议使用最新稳定版 -->
        <configuration>
            <skipTests>false</skipTests> <!-- 强制关闭测试跳过 -->
            <failIfNoTests>false</failIfNoTests> <!-- 无测试用例时不报错,仅提示 -->
        </configuration>
        <executions>
            <execution>
                <phase>test</phase>
                <goals>
                    <goal>test</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    
    • skipTests>false:确保不会全局跳过测试阶段
    • failIfNoTests>false:兼容当前无测试用例的场景,避免构建失败;后续添加测试后,插件会自动执行测试
  2. 检查并移除全局跳过测试的配置
    检查你的pom.xml中是否存在以下全局配置,如果有,将<skipTests>改为false:

    <properties>
        <skipTests>false</skipTests>
    </properties>
    
  3. 保持assembly插件的现有配置
    你当前的assembly插件配置已经将执行阶段绑定到package,而package在Maven生命周期中晚于test阶段,所以无需修改这部分配置,只要test阶段正常执行,打包就会在测试之后进行。

验证方式:
执行mvn package命令,控制台会输出test阶段的日志(哪怕无测试用例,也会显示No tests to run),之后才会进入assembly插件的打包流程。如果后续添加了JUnit测试,这些测试会自动在打包前执行,一旦测试失败,构建会终止,不会生成Jar包。

内容的提问来源于stack exchange,提问作者membersound

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:22:36