我最近使用Maven Enforcer Plugin来强制所有 POM 定义一个foo.bar
属性。我将此声明放在我的公司 POM 中,并假设它将适用于我的子项目。
令我沮丧的是(但并不意外),这条规则也在我的公司 POM 上强制执行。结果,我尽职尽责地定义了一个占位符foo.bar
属性,并认为我已经完成了。
不幸的是,所有子项目都继承了这个属性,从而通过了强制测试。我无法确定孩子是明确定义了这个属性还是只是继承了一个无意义的值。任何人都可以提出一种方法:
确保此(特定)规则不适用于我的公司 POM;或者
确保我的占位符属性不被子项目继承;或者
以另一种方式解决我的问题?
如果有帮助,我的实施者规则的定义如下所示。这个片段来自我公司的 POM。
<!-- Enforce good behaviour in child POMs -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>enforce-good-behaviour</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireProperty>
<property>foo.bar</property>
<message>NAUGHTY!</message>
<regex>.+</regex>
<regexMessage>The property must contain at least one character.</regexMessage>
</requireProperty>
</rules>
</configuration>
</execution>
</executions>
</plugin>
我的目标是自动将此属性值用作 SCM 标记指令的一部分。我的公司 POM 中有以下片段,它为我的子项目定义了一个很好的标记方案:
<!-- Ensure we use a consistent tagging scheme for releases -->
<plugin>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<tagNameFormat>a.b.c.${foo.bar}</tagNameFormat>
<useReleaseProfile>false</useReleaseProfile>
</configuration>
</plugin>