如何让maven-assembly-plugin执行JUnit测试后再构建Jar包?
解决maven-assembly-plugin构建Jar前强制执行JUnit测试的问题
首先明确核心逻辑:Maven的默认生命周期里,test阶段本来就排在package阶段之前,所以只要保证test阶段不被跳过,assembly插件的打包操作就会在测试完成后执行。你的问题本质是之前无测试用例导致test阶段被“静默跳过”,现在要强制触发test阶段的执行(哪怕暂时没测试),后续添加测试后也能自动运行。
具体操作步骤:
添加并配置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:兼容当前无测试用例的场景,避免构建失败;后续添加测试后,插件会自动执行测试
检查并移除全局跳过测试的配置
检查你的pom.xml中是否存在以下全局配置,如果有,将<skipTests>改为false:<properties> <skipTests>false</skipTests> </properties>保持assembly插件的现有配置
你当前的assembly插件配置已经将执行阶段绑定到package,而package在Maven生命周期中晚于test阶段,所以无需修改这部分配置,只要test阶段正常执行,打包就会在测试之后进行。
验证方式:
执行mvn package命令,控制台会输出test阶段的日志(哪怕无测试用例,也会显示No tests to run),之后才会进入assembly插件的打包流程。如果后续添加了JUnit测试,这些测试会自动在打包前执行,一旦测试失败,构建会终止,不会生成Jar包。
内容的提问来源于stack exchange,提问作者membersound
相关产品推荐
相关产品推荐

