如何使用 jacoco 检查多模块 Maven 项目的最小代码覆盖率?
How to check minimum code coverage for multi-module maven project with jacoco?
我想使用 jacoco maven plugin
在使用 'check'
目标的构建过程中检查最低级别的代码覆盖率。
对于单模块项目,一切正常。
但是对于多模块,我想检查所有模块的平均代码覆盖率,但是 check
目标分别检查每个模块。
例如,module1 有 70% 的代码覆盖率,module2 有 100% 代码覆盖率,两个模块的所有行的平均代码覆盖率为 85%。
我正在尝试将所有项目的代码覆盖率设置为 80%,但由于第一个模块而失败。
来自 pom:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.6.201602180812</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
<execution>
<id>default-check</id>
<goals>
<goal>check</goal>
</goals>
<configuration>
<rules>
<rule>
<element>BUNDLE</element>
<limits>
<limit>
<counter>COMPLEXITY</counter>
<value>COVEREDRATIO</value>
<minimum>0.80</minimum>
</limit>
</limits>
</rule>
</rules>
</configuration>
</execution>
</executions>
</plugin>
简短回答:不可能(在撰写本文时)仅使用 Maven 和 Jacoco。
来自 official jacoco github page:
The current JaCoCo Maven goals work on single modules only: Tests are executed within the module and contribute coverage only to code within the same module. Coverage reports are created for each module separately. There is no built-in support for cross-module coverage or combined reports for multiple modules.
因此仅仅使用Maven和Jacoco是无法满足您的要求的。但是,您可以在企业设置中使用一种通用方法:Sonarqube,它将处理生成的 jacoco 文件(即 jacoco.exec
)并通过其 Jacoco 集成(在其最新版本中开箱即用)聚合报告和治理).
来源:https://www.jacoco.org/jacoco/trunk/doc/check-mojo.html
使用 Bundle with counter Intruction,这将检查整个项目的整体代码覆盖率:
<rules>
<rule>
<element>BUNDLE</element>
<limits>
<limit>
<counter>INSTRUCTION</counter>
<value>COVEREDRATIO</value>
<minimum>0.80</minimum>
</limit>
</limits>
</rule>
我想使用 jacoco maven plugin
在使用 'check'
目标的构建过程中检查最低级别的代码覆盖率。
对于单模块项目,一切正常。
但是对于多模块,我想检查所有模块的平均代码覆盖率,但是 check
目标分别检查每个模块。
例如,module1 有 70% 的代码覆盖率,module2 有 100% 代码覆盖率,两个模块的所有行的平均代码覆盖率为 85%。 我正在尝试将所有项目的代码覆盖率设置为 80%,但由于第一个模块而失败。
来自 pom:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.6.201602180812</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
<execution>
<id>default-check</id>
<goals>
<goal>check</goal>
</goals>
<configuration>
<rules>
<rule>
<element>BUNDLE</element>
<limits>
<limit>
<counter>COMPLEXITY</counter>
<value>COVEREDRATIO</value>
<minimum>0.80</minimum>
</limit>
</limits>
</rule>
</rules>
</configuration>
</execution>
</executions>
</plugin>
简短回答:不可能(在撰写本文时)仅使用 Maven 和 Jacoco。
来自 official jacoco github page:
The current JaCoCo Maven goals work on single modules only: Tests are executed within the module and contribute coverage only to code within the same module. Coverage reports are created for each module separately. There is no built-in support for cross-module coverage or combined reports for multiple modules.
因此仅仅使用Maven和Jacoco是无法满足您的要求的。但是,您可以在企业设置中使用一种通用方法:Sonarqube,它将处理生成的 jacoco 文件(即 jacoco.exec
)并通过其 Jacoco 集成(在其最新版本中开箱即用)聚合报告和治理).
来源:https://www.jacoco.org/jacoco/trunk/doc/check-mojo.html
使用 Bundle with counter Intruction,这将检查整个项目的整体代码覆盖率:
<rules>
<rule>
<element>BUNDLE</element>
<limits>
<limit>
<counter>INSTRUCTION</counter>
<value>COVEREDRATIO</value>
<minimum>0.80</minimum>
</limit>
</limits>
</rule>