
本文介绍在纯测试型 Maven 项目(如 Cucumber)中,如何通过配置 maven-jar-plugin 的 skipIfEmpty 参数,彻底消除「JAR will be empty」警告,避免构建干扰且不破坏标准生命周期。
本文介绍在纯测试型 maven 项目(如 cucumber)中,如何通过配置 `maven-jar-plugin` 的 `skipifempty` 参数,彻底消除「jar will be empty」警告,避免构建干扰且不破坏标准生命周期。
在仅包含测试代码(如 Cucumber BDD 测试)、无需生成主构件(即无 src/main/java 或 src/main/resources)的 Maven 项目中,mvn verify 等生命周期阶段仍会默认触发 maven-jar-plugin:jar 目标——该目标尝试打包 target/classes/ 下的内容,但因目录为空,最终输出警告:
[WARNING] JAR will be empty - no content was marked for inclusion!
该警告虽不影响测试执行,却污染构建日志、干扰 CI/CD 可读性,且易被误判为配置错误。根本原因并非项目结构异常,而是 Maven 默认行为未适配「测试专用项目」这一合法场景。
✅ 正确解法是显式配置 maven-jar-plugin,启用 skipIfEmpty 选项:当检测到待打包内容为空时,自动跳过 jar 执行,从而静默规避警告,同时完全兼容 verify 生命周期(不影响 Surefire/Failsafe 插件运行测试)。
在 pom.xml 的
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<skipIfEmpty>true</skipIfEmpty>
</configuration>
</plugin>⚠️ 注意事项:
-
勿禁用整个插件:不要使用
none 或true ,否则可能意外影响依赖解析或 maven-source-plugin 等下游插件; - 版本兼容性:skipIfEmpty 自 maven-jar-plugin 3.0.0 起可用,但 3.3.0 是当前广泛验证的稳定版本;
- 作用范围精准:该配置仅跳过 jar 目标(生成主 JAR),不影响 test-jar(如有需要)或测试执行流程;
- 零副作用:mvn verify 仍完整运行编译、测试、报告等阶段,仅省略无意义的空 JAR 构建步骤。
总结:对于测试驱动型项目,skipIfEmpty=true 是语义清晰、官方支持、无侵入性的最佳实践。它既尊重 Maven 的约定优于配置原则,又精准解决特定场景下的噪音问题,是专业构建配置中值得纳入模板的标准化设置。










