gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 02:42:46 30 4
gpt4 key购买 nike

我最近使用了 Maven Enforcer Plugin强制所有 POM 定义一个 foo.bar 属性。我将此声明放在我的公司 POM 中,并假设它将适用于我的子项目。

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

不幸的是,所有的子项目都继承了这个属性,从而通过了 enforcer 测试。我无法确定 children 是否明确定义了这个属性,或者只是继承了一个无意义的值。任何人都可以建议一种方法:

  • 确保此(特定)规则未应用于我的公司 POM;

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

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

如果有帮助,我的执行者规则的定义如下所示。此片段来 self 的公司 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>

最佳答案

我也有同样的困境。这是我解决它的方法。

在企业 POM 中,我添加了这样的配置文件:

    <profile>
<!-- When we are building the corporate base projects we don't want
to require that all of the properties that should be provided by
child projects (inheriters) are defined. So we activate this
profile when building the corporate projects to bypass anything
that only applies to children (the leaf projects).
Add "-Dcorporate.build=true" on the maven cmd line when building
and releasing the corporate POMs to accomplish this. -->
<id>corporate-pom-build</id>
<activation>
<property>
<name>corporate.build</name>
<value>true</value>
</property>
</activation>
<properties>
<enforcer.skip>true</enforcer.skip>
<remoteresources.skip>true</remoteresources.skip>
<assembly.skipAssembly>true</assembly.skipAssembly>
</properties>
</profile>

然后,正如评论所说,我使用

构建公司 POM

mvn -Dcorporate.build=true clean deploy

您想要跳过的其他内容也可以放在该配置文件中。就像一个魅力。

关于maven - 要求在子模块中定义 Maven 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14751658/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com