要求在子模块中定义Maven属性

要求在子模块中定义Maven属性,maven,pom.xml,maven-enforcer-plugin,Maven,Pom.xml,Maven Enforcer Plugin,我最近使用了命令,要求所有POM定义foo.bar属性。我将此声明放在我的公司POM中,并假设它将适用于我的子项目 令我沮丧(但并不意外)的是,这项规定也在我的公司POM上实施。因此,我尽职尽责地定义了一个占位符foo.bar属性,并认为我已经完成了 不幸的是,所有的子项目都继承了这个属性,因此通过了enforcer测试。我无法确定孩子们是明确定义了这个属性,还是仅仅继承了一个无意义的值。有人能提出一种方法来: 确保本(特定)规则不适用于我的公司POM或 确保我的占位符属性未被子项目继承或 用

我最近使用了命令,要求所有POM定义
foo.bar
属性。我将此声明放在我的公司POM中,并假设它将适用于我的子项目

令我沮丧(但并不意外)的是,这项规定也在我的公司POM上实施。因此,我尽职尽责地定义了一个占位符
foo.bar
属性,并认为我已经完成了

不幸的是,所有的子项目都继承了这个属性,因此通过了enforcer测试。我无法确定孩子们是明确定义了这个属性,还是仅仅继承了一个无意义的值。有人能提出一种方法来:

  • 确保本(特定)规则不适用于我的公司POM

  • 确保我的占位符属性未被子项目继承

  • 用另一种方法解决我的问题

如果有帮助,我的强制执行者规则的定义如下所示。这段代码来自我的公司POM


org.apache.maven.plugins
maven enforcer插件
1.2
执行良好行为
执行
美食酒吧
淘气!
.+
属性必须至少包含一个字符。
我的目标是在SCM标记指令中自动使用此属性值。我的公司POM中有以下代码片段,为我的子项目定义了一个很好的标记方案:


maven发布插件
a、 不列颠哥伦比亚省${foo.bar}
假的

我也遇到了同样的困境。我是这样解决的

在公司POM中,我添加了如下配置文件:


企业pom构建
公司建设
真的
真的
真的
真的
然后,正如评论所说,我用

mvn-Dcorporate.build=true clean deploy

您想跳过的其他内容也可以包含在该配置文件中。的规则允许您检查父POM中定义的属性是否在子POM中被覆盖

对于您的用例,配置应该如下所示(尚未测试):


org.apache.maven.plugins
maven enforcer插件
1.2
强制在子对象中重写的属性
执行
美食酒吧
org.codehaus.mojo
额外执行者规则
1.0-α-5

请小心,因为任何人都可以将enforcer.skip属性设置为true以绕过您试图完成的任务。@Michael感谢您的警告。在我的环境中,人们不会积极地试图颠覆这个系统,所以希望一切都会好起来。如果他们这样做了,那么。。。我是老板,他们注定要失败:-)同意-如果他们真的决定积极颠覆,SCM系统可能会在某种程度上阻塞
${}
字符,给他们留下一团混乱需要清理(并且必须向邓肯解释他们为什么这么做)。邓肯-好交易。我之所以提到它,是因为我让一些人将“maven.test.skip”设置为true,因为他们不喜欢junits运行每个构建。我无法让它工作。我一直收到错误消息:未能找到定义当前规则的父POM