在父POM中,我们设置了Jacoco规则来强制执行测试覆盖。这包括对通常没有行为的课程的一些排除:
<execution>
<id>default-check</id>
<goals>
<goal>check</goal>
</goals>
<configuration>
<excludes>
<!-- exclude largely auto-generated domain and model classes -->
<exclude>**/model/*.class</exclude>
<exclude>**/model/**/*.class</exclude>
<exclude>**/domain/*.class</exclude>
<exclude>**/domain/**/*.class</exclude>
<exclude>**/dto/*.class</exclude>
<exclude>**/dto/**/*.class</exclude>
</excludes>
<rules>
<rule>
<element>BUNDLE</element>
<limits>
<limit implementation="org.jacoco.report.check.Limit">
<counter>INSTRUCTION</counter>
<value>COVEREDRATIO</value>
<minimum>0.70</minimum>
</limit>
</limits>
</rule>
</rules>
</configuration>
</execution>
在使用此父级的子POM中,添加其他排除类模式的Maven魔法是什么?
我尝试以各种方式使用combine...
属性,但无法让有效的POM正确显示。
有什么想法吗?
答案 0 :(得分:2)
您无法扩展列表,但可以覆盖它。大多数情况下,您需要每个模块的特定排除列表(在不同模块中,您有多少次使用完全相同的类型?)
要做到这一点,不要在父POM中添加任何排除项。只需将标准/共享执行及其配置放在那里。在孩子POM:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>ch/swissquant/toolbox/exceptions/**/*.class</exclude>
<exclude>ch.swissquant.toolbox.exceptions.*</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
Maven将读取此配置并将其与在父POM中找到的任何执行合并(因此它将应用于复杂Jacoco过程的所有步骤)。
合并的工作原理如下:Maven读取父POM,然后用子POM中的任何特定值覆盖它(最后一个条目获胜)。对于属性也是如此,因此您可以使用属性定义父级中的覆盖率等内容的默认值,并重新定义子级中的属性。
您可以通过运行mvn help:effective-pom
来验证这一点。
答案 1 :(得分:1)
使用逗号分隔列表代替单独的 <exclude>
标签
父 Pom
<excludes>**/dto/**/*.class,${jacoco.exclusions}
</excludes>
儿童绒球
<properties>
<jacoco.exclusions>**/model/*.class,**/model/**/*.class</jacoco.exclusions>
</properties>