使用Maven在子POM中继承父POM的属性

3

我正在参与一个大型项目,其中我们有多个模块,每个模块都是一个独立的 Maven 项目,并具有共同的父 POM。

除其他事项外,父 POM 还定义了我们构建服务器上的 Sonar 集成。我们构建服务器上的 Sonar 插件评估“sonar.exclusions”属性,以跳过我们不想分析的文件。

为此,我们在父 POM 中定义了一个属性:

<properties>
    <sonar.exclusion>**/generated/**/*,**/migration/**/*</sonar.exclusions>
</properties>

现在,在我们的一个项目中,我们想要将其添加到这个排除列表中。我不想替换父级定义的这些排除项,但我也不想重复它们。我要寻找的是类似于以下内容的东西:
<properties>
  <sonar.exclusions>${sonar.exclusions},**/shadow/compare/**/*</sonar.exclusions>
</properties>

最终,我希望${sonar.exclusions}的内容是

**/generated/**/*,**/migration/**/*,**/shadow/compare/**/*

然而,尝试上述操作会导致错误:

pom.xml has 1 error [main] ERROR org.apache.maven.cli.MavenCli - Resolving expression:  ${sonar.exclusions}': Detected the following recursive expression cycle in 'sonar.exclusions': [sonar.exclusions]

有没有办法实现我想要的?
1个回答

4

您可以在父POM中定义一个属性<sonar.standard.exclusions>,其中包含您的标准排除项,并设置<sonar.exclusions>${sonar.standard.exclusions}</sonar.exclusions>

然后,您可以在您的POM中覆盖该属性作为

<sonar.exclusions>${sonar.standard.exclusions},**/shadow/compare/**/*</sonar.exclusions>

虽然这在我想要扩展它的项目中可以工作,但它将不再适用于使用未修改的父属性的其他> 12个项目。我猜我可以通过向所有这些项目添加<sonar.exclusions>${sonar.standard.exclusions}</sonar.exclusions>来解决这个问题...或者更好的是,我将把上述行添加到父POM中,那么如果它没有被覆盖,那就可以工作了,如果我想要覆盖它,我有一种简单的方法来添加特定的排除项到标准排除项中。 - Urs Beeli
没错,将其放入父POM中。 - J Fabian Meier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接