Maven 插件 - 如何为列表的每个项目配置元素
Maven plugin - How to configure element for each item of a list
我正在尝试在父模块中设置和实施代码覆盖,但允许从子模块进行覆盖。特别是 jacoco-maven-plugin 和来自子模块的规则排除。
我去过:
http://maven.apache.org/pom.html#advanced_configuration_inheritance
并尝试了各种组合选项但均未成功。
在父级中,我有一个如下所示的插件定义:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
...
<configuration>
<rules>
<rule>
<element>CLASS</element>
<limits>
<limit implementation="org.jacoco.report.check.Limit">
<counter>LINE</counter>
<value>COVEREDRATIO</value>
<minimum>1.0</minimum>
</limit>
</limits>
</rule>
<rule>
<element>BUNDLE</element>
<limits>
<limit implementation="org.jacoco.report.check.Limit">
<counter>PACKAGE</counter>
<value>COVEREDRATIO</value>
<minimum>1.0</minimum>
</limit>
</limits>
</rule> </rules> </configuration>
在子模块中,我试图避免到处复制和粘贴,但我正在努力让 maven 插件配置做我想做的事。
在我的子模块中,我希望有类似的东西:
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<configuration>
<rules>
<rule>
<excludes>
<exclude>*Application*</exclude>
<exclude>*Config*</exclude>
</excludes>
</rule>
</rules>
</configuration>
</plugin>
生成以下 effective-pom,并将排除项添加到每个规则元素。
<rules>
<rule>
<element>CLASS</element>
<excludes>
<exclude>*Application*</exclude>
<exclude>*Config*</exclude>
</excludes>
<limits>...</limit>
</limits>
</rule>
<rule>
<element>BUNDLE</element>
<excludes>
<exclude>*Application*</exclude>
<exclude>*Config*</exclude>
</excludes>
<limits>...</limits>
</rule> </rules> </configuration>
我尝试了很多插件配置继承属性,但都无法破解。
combine.self=[合并|覆盖|追加]
combine.children=[合并|覆盖|追加]
<rules combine.self="merge">
<rule>
<excludes combine.children="append">
<exclude>*Application*</exclude>
<exclude>*Config*</exclude>
</excludes>
</rule>
</rules>
但是生成的effective-pom只包含第一个规则定义和这意味着丢失BUNDLE规则配置
<rules>
<rule>
<element>CLASS</element>
<excludes>
<exclude>*Application*</exclude>
<exclude>*Config*</exclude>
</excludes>
<limits>...</limit>
</limits>
</rule>
是否可以为每个子规则元素将 Maven 配置为 ADD/APPEND/OVERRIDE 这个 <excludes/>
?
感谢您的任何见解!
可能还有其他神奇的方法可以解决我完全想念的这个问题,但这是我解决阻塞问题的方法。
高级配置继承页面只提到
combine.children
或 combine.self
但阅读 POM.xsd 时提到
https://codehaus-plexus.github.io/plexus-utils/apidocs/org/codehaus/plexus/util/xml/Xpp3DomUtils.html
在深入研究此页面的文档时,我偶然发现了两个额外的选项
combine.id
和 combine.keys
我很感激有测试为这些属性的工作方式提供了参考。
在我的父 pom 中,我已经使用这些 combine.id
属性定义了插件配置。
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
...
<configuration>
<rules combine.id="jacoco-rules" combine.children="merge">
<rule combine.id="class-rule" combine.children="merge">
<element>CLASS</element>
<excludes combine.id="class-rule-excludes" combine.children="merge">
<exclude>META-INF/**</exclude>
</excludes>
<limits>
...
</limits>
</rule>
<rule combine.id="bundle-rule" >
<element>BUNDLE</element>
<excludes combine.id="bundle-rule-excludes" combine.children="merge">
<exclude>META-INF/**</exclude>
</excludes>
<limits>...
这允许我添加到我的子 pom 中引用此 combine.id
的现有规则,我的工作解决方案现在看起来像
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<rules combine.id="jacoco-rules" combine.children="merge">
<rule combine.id="class-rule" combine.children="merge">
<excludes combine.children="append">
<exclude>*Application*</exclude>
<exclude>*Config*</exclude>
</excludes>
</rule>
<rule combine.id="bundle-rule"></rule>
</rules>
</configuration>
</plugin>
effective-pom 现在看起来和我期望的一样,同时存在和配置了 CLASS 和 BUNDLE 规则,但只有 CLASS 具有排除元素。
有效pom
<rule combine.id="class-rule" combine.children="merge">
<!--This is the element I was trying to add to this plugin configuration -->
<excludes combine.id="class-rule-excludes" combine.children="append">
<exclude>*Application*</exclude>
<exclude>*Config*</exclude>
</excludes>
<element>CLASS</element>
<limits>...
</limits>
</rule>
<rule combine.id="bundle-rule">
<element>BUNDLE</element>
<!-- no child plugin changes -->
注意:我很确定所有 combine.children="merge"
属性都是多余的,并且这些 combine.id
或 combine.keys
可能在您的 maven 版本中不可用。
HTH
我正在尝试在父模块中设置和实施代码覆盖,但允许从子模块进行覆盖。特别是 jacoco-maven-plugin 和来自子模块的规则排除。 我去过: http://maven.apache.org/pom.html#advanced_configuration_inheritance 并尝试了各种组合选项但均未成功。
在父级中,我有一个如下所示的插件定义:
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
...
<configuration>
<rules>
<rule>
<element>CLASS</element>
<limits>
<limit implementation="org.jacoco.report.check.Limit">
<counter>LINE</counter>
<value>COVEREDRATIO</value>
<minimum>1.0</minimum>
</limit>
</limits>
</rule>
<rule>
<element>BUNDLE</element>
<limits>
<limit implementation="org.jacoco.report.check.Limit">
<counter>PACKAGE</counter>
<value>COVEREDRATIO</value>
<minimum>1.0</minimum>
</limit>
</limits>
</rule> </rules> </configuration>
在子模块中,我试图避免到处复制和粘贴,但我正在努力让 maven 插件配置做我想做的事。
在我的子模块中,我希望有类似的东西:
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<configuration>
<rules>
<rule>
<excludes>
<exclude>*Application*</exclude>
<exclude>*Config*</exclude>
</excludes>
</rule>
</rules>
</configuration>
</plugin>
生成以下 effective-pom,并将排除项添加到每个规则元素。
<rules>
<rule>
<element>CLASS</element>
<excludes>
<exclude>*Application*</exclude>
<exclude>*Config*</exclude>
</excludes>
<limits>...</limit>
</limits>
</rule>
<rule>
<element>BUNDLE</element>
<excludes>
<exclude>*Application*</exclude>
<exclude>*Config*</exclude>
</excludes>
<limits>...</limits>
</rule> </rules> </configuration>
我尝试了很多插件配置继承属性,但都无法破解。
combine.self=[合并|覆盖|追加]
combine.children=[合并|覆盖|追加]
<rules combine.self="merge">
<rule>
<excludes combine.children="append">
<exclude>*Application*</exclude>
<exclude>*Config*</exclude>
</excludes>
</rule>
</rules>
但是生成的effective-pom只包含第一个规则定义和这意味着丢失BUNDLE规则配置
<rules>
<rule>
<element>CLASS</element>
<excludes>
<exclude>*Application*</exclude>
<exclude>*Config*</exclude>
</excludes>
<limits>...</limit>
</limits>
</rule>
是否可以为每个子规则元素将 Maven 配置为 ADD/APPEND/OVERRIDE 这个 <excludes/>
?
感谢您的任何见解!
可能还有其他神奇的方法可以解决我完全想念的这个问题,但这是我解决阻塞问题的方法。
高级配置继承页面只提到
combine.children
或 combine.self
但阅读 POM.xsd 时提到
https://codehaus-plexus.github.io/plexus-utils/apidocs/org/codehaus/plexus/util/xml/Xpp3DomUtils.html
在深入研究此页面的文档时,我偶然发现了两个额外的选项
combine.id
和 combine.keys
我很感激有测试为这些属性的工作方式提供了参考。
在我的父 pom 中,我已经使用这些 combine.id
属性定义了插件配置。
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
...
<configuration>
<rules combine.id="jacoco-rules" combine.children="merge">
<rule combine.id="class-rule" combine.children="merge">
<element>CLASS</element>
<excludes combine.id="class-rule-excludes" combine.children="merge">
<exclude>META-INF/**</exclude>
</excludes>
<limits>
...
</limits>
</rule>
<rule combine.id="bundle-rule" >
<element>BUNDLE</element>
<excludes combine.id="bundle-rule-excludes" combine.children="merge">
<exclude>META-INF/**</exclude>
</excludes>
<limits>...
这允许我添加到我的子 pom 中引用此 combine.id
的现有规则,我的工作解决方案现在看起来像
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<rules combine.id="jacoco-rules" combine.children="merge">
<rule combine.id="class-rule" combine.children="merge">
<excludes combine.children="append">
<exclude>*Application*</exclude>
<exclude>*Config*</exclude>
</excludes>
</rule>
<rule combine.id="bundle-rule"></rule>
</rules>
</configuration>
</plugin>
effective-pom 现在看起来和我期望的一样,同时存在和配置了 CLASS 和 BUNDLE 规则,但只有 CLASS 具有排除元素。
有效pom
<rule combine.id="class-rule" combine.children="merge">
<!--This is the element I was trying to add to this plugin configuration -->
<excludes combine.id="class-rule-excludes" combine.children="append">
<exclude>*Application*</exclude>
<exclude>*Config*</exclude>
</excludes>
<element>CLASS</element>
<limits>...
</limits>
</rule>
<rule combine.id="bundle-rule">
<element>BUNDLE</element>
<!-- no child plugin changes -->
注意:我很确定所有 combine.children="merge"
属性都是多余的,并且这些 combine.id
或 combine.keys
可能在您的 maven 版本中不可用。
HTH