如何让 Cobertura 因代码覆盖率低而导致 M2 构建失败
我正在尝试将 WAR 项目构建配置为在行或分支覆盖率低于给定阈值时失败。 我一直在使用优秀书籍 Java Power Tools 第 455 页上提供的配置,但没有成功。 这是我的项目的 Maven 2 POM 的相关片段:
<build>
...
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<check>
<!-- Per-class thresholds -->
<lineRate>80</lineRate>
<branchRate>80</branchRate>
<!-- Project-wide thresholds -->
<totalLineRate>90</totalLineRate>
<totalBranchRate>90</totalBranchRate>
</check>
<executions>
<execution>
<goals>
<goal>clean</goal>
<goal>check</goal>
</goals>
</execution>
<execution>
<id>coverage-tests</id>
<!-- The "verify" phase occurs just before "install" -->
<phase>verify</phase>
<goals>
<goal>clean</goal>
<goal>check</goal>
</goals>
</execution>
</executions>
<instrumentation>
<excludes>
<exclude>au/**/*Constants.*</exclude>
</excludes>
<ignores>
<ignore>au/**/*Constants.*</ignore>
</ignores>
</instrumentation>
</configuration>
</plugin>
...
</plugins>
...
</build>
正如我所说,覆盖率报告工作正常,问题是如果行或分支覆盖率低于我指定的阈值,“安装”目标不会失败。 有没有人有这个工作,如果是的话,你的 POM 是什么样的,你使用的是哪个版本的 Cobertura 和 Maven? 我正在使用 Maven 2.0.9 和 Cobertura 2.2。
我尝试过谷歌搜索和阅读 Cobertura 文档,但没有运气(至少可以说后者很少)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
据我所知,如果
元素设置为 true 并且任何指定的检查失败,那么 Cobertura 将导致构建失败,这就是您的情况重新要求。 但实际上,如果您未指定此元素,则它默认为true
,因此您不必将其添加到您的 配置检查。 低于任何覆盖阈值的构建失败是(或至少应该是)默认行为。编辑:我做了一些进一步的测试,
haltOnFailure
似乎在我的环境中按预期工作(Maven 2.2.1。以及插件版本2.3、2.2、2.1,即版本Linux 上的 cobertura 1.9.2、1.9、1.8)。 我正在用下面的结果更新这个答案。实际上,我已经在我的 pom.xml 中添加了一个
元素。 我可能误解了 cobertura:check 文档的部分这表示它“默认绑定到生命周期阶段:verify
”,但是如果没有
元素,cobertura:check 在验证阶段未触发我的构建。 下面是我用于 cobertura-maven-plugin 的设置:在新生成的 Maven 项目上运行
mvn clean install
时,我得到以下结果(使用mvn archetype:create
>)用上面提到的插件配置进行修补:我没有使用maven 2.0.9进行测试,但在我的机器上,
haltOnFailure
生成一个构建错误并停止构建。 我没有看到您的插件配置有任何差异,我无法重现您描述的行为。To my knowledge, if the
<haltOnFailure>
element is set to true and any of the specified checks fails, then Cobertura will cause the build to fail which is what you're asking for. But actually, this element defaults totrue
if you do not specify it so you don't have to add it to your configuration checks. Failing the build below any coverage threshold is (or at least should be) the default behavior.EDIT: I did some further testing and
haltOnFailure
seems to be working as expected on my environment (Maven 2.2.1. and versions 2.3, 2.2, 2.1 of the plugin i.e. versions 1.9.2, 1.9, 1.8 of cobertura on Linux). I'm updating this answer with the result below.Actually, I've added an
<execution>
element to my pom. I may be misinterpreting the part of cobertura:check's documentation that says it "Binds by default to the lifecycle phase:verify
" but, without the<execution>
element, cobertura:check wasn't triggered during the verify phase of my build. Below the setup I've use for the cobertura-maven-plugin:I get the following result when running
mvn clean install
on a freshly generated maven project (withmvn archetype:create
) patched with the plugin configuration mentioned above:I didn't test with maven 2.0.9, but on my machine,
haltOnFailure
generates a BUILD ERROR and halt the build. I don't see any differences with your plugin configuration, I can't reproduce the behavior you describe.将以下内容添加到> 中 配置。
Add the following to the <check/> configuration.
mvn clean install -Dcobertura.skip=true
mvn clean install -Dcobertura.skip=true