如果行或分支覆盖范围低于给定的阈值,我试图将我的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。
我尝试了Googling并阅读了Cobertura文档,但没有运气(至少可以说后者很少)。
据我所知, 如果将该<haltOnFailure>元素设置为true,并且任何指定的检查均失败,那么Cobertura将导致构建失败,这正是您所要求的。但是实际上,true如果您未指定此元素,则默认为,因此 不必 将其添加到配置检查中。默认版本是(或至少应该是)使构建低于任何覆盖率阈值。
<haltOnFailure>
true
编辑: 我做了一些进一步的测试,并且haltOnFailure似乎在我的环境(Maven 2.2.1。以及插件的2.3、2.2、2.1版,即Linux上的cobertura的1.9.2、1.9、1.8版)上按预期工作。我正在用以下结果更新此答案。
haltOnFailure
实际上,我已经<execution>在pom中添加了一个元素。我可能会误解了cobertura:check的文档中说“ 默认绑定到生命周期阶段:verify ”的<execution>部分,但是,没有该元素,在我的构建的 验证 阶段未触发cobertura:check。在我用于cobertura-maven-plugin的设置下面: __
<execution>
verify
<project> ... <build> ... <plugins> ... <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> <version>2.3</version> <configuration> <check> <!--<haltOnFailure>true</haltOnFailure>--><!-- optional --> <!-- Per-class thresholds --> <lineRate>80</lineRate> <branchRate>80</branchRate> <!-- Project-wide thresholds --> <totalLineRate>90</totalLineRate> <totalBranchRate>90</totalBranchRate> </check> </configuration> <executions> <execution> <phase>verify</phase> <goals> <!--<goal>clean</goal>--><!-- works if uncommented --> <goal>check</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
mvn clean install在mvn archetype:create使用上述插件配置修补的新生成的Maven项目(带有)上运行时,我得到以下结果:
mvn clean install
mvn archetype:create
$ mvn archetype:create -DgroupId=com.mycompany.samples -DartifactId=cobertura-haltonfailure-testcase ... $ mvn clean install [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Building cobertura-haltonfailure-testcase [INFO] task-segment: [clean, install] [INFO] ------------------------------------------------------------------------ [INFO] [clean:clean {execution: default-clean}] [INFO] Deleting directory /home/pascal/Projects/cobertura-haltonfailure-testcase/target [INFO] [resources:resources {execution: default-resources}] [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /home/pascal/Projects/cobertura-haltonfailure-testcase/src/main/resources [INFO] [compiler:compile {execution: default-compile}] [INFO] Compiling 1 source file to /home/pascal/Projects/cobertura-haltonfailure-testcase/target/classes [INFO] [resources:testResources {execution: default-testResources}] [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /home/pascal/Projects/cobertura-haltonfailure-testcase/src/test/resources [INFO] [compiler:testCompile {execution: default-testCompile}] [INFO] Compiling 1 source file to /home/pascal/Projects/cobertura-haltonfailure-testcase/target/test-classes [INFO] [surefire:test {execution: default-test}] [INFO] Surefire report directory: /home/pascal/Projects/cobertura-haltonfailure-testcase/target/surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.mycompany.samples.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.09 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [jar:jar {execution: default-jar}] [INFO] Building jar: /home/pascal/Projects/cobertura-haltonfailure-testcase/target/cobertura-haltonfailure-testcase-1.0-SNAPSHOT.jar [INFO] Preparing cobertura:check [WARNING] Removing: check from forked lifecycle, to prevent recursive invocation. [INFO] [resources:resources {execution: default-resources}] [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /home/pascal/Projects/cobertura-haltonfailure-testcase/src/main/resources [INFO] [compiler:compile {execution: default-compile}] [INFO] Nothing to compile - all classes are up to date [INFO] [cobertura:instrument {execution: default}] [INFO] Cobertura 1.9.2 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file Instrumenting 1 file to /home/pascal/Projects/cobertura-haltonfailure-testcase/target/generated-classes/cobertura Cobertura: Saved information on 1 classes. Instrument time: 337ms [INFO] Instrumentation was successful. [INFO] [resources:testResources {execution: default-testResources}] [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /home/pascal/Projects/cobertura-haltonfailure-testcase/src/test/resources [INFO] [compiler:testCompile {execution: default-testCompile}] [INFO] Nothing to compile - all classes are up to date [INFO] [surefire:test {execution: default-test}] [INFO] Surefire report directory: /home/pascal/Projects/cobertura-haltonfailure-testcase/target/surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.mycompany.samples.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.098 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [cobertura:check {execution: default}] [INFO] Cobertura 1.9.2 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file Cobertura: Loaded information on 1 classes. [ERROR] com.mycompany.samples.App failed check. Line coverage rate of 0.0% is below 80.0% Project failed check. Total line coverage rate of 0.0% is below 90.0% [INFO] ------------------------------------------------------------------------ [ERROR] BUILD ERROR [INFO] ------------------------------------------------------------------------ [INFO] Coverage check failed. See messages above. [INFO] ------------------------------------------------------------------------ [INFO] For more information, run Maven with the -e switch [INFO] ------------------------------------------------------------------------ [INFO] Total time: 18 seconds [INFO] Finished at: Sat Oct 24 21:00:39 CEST 2009 [INFO] Final Memory: 17M/70M [INFO] ------------------------------------------------------------------------ $
我没有使用maven 2.0.9进行测试,但是在我的机器上,haltOnFailure生成了一个BUILD ERROR并停止了构建。我没有发现您的插件配置有任何差异,也无法重现您描述的行为。