使用Maven,是否可以“添加到”在父POM中指定的属性或插件值?

4
如果在我Maven项目的父pom.xml中,有以下类似于属性的代码:
<properties>
   <argLine>some args</argLine>
</properties>

在孩子身上是否有可能以某种方式“增强”它,例如:
<properties>
   <argLine>${parent.argLine} some more args</argLine>
</properties>

同样地,对于插件设置,我希望能够做类似于以下的操作:
<build>
   <plugins>
    <plugin>
       <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
            <argLine>${parent.plugin.maven-surefire-plugin.argLine} -Xmx1G</argLine>
          </configuration> 

我基本上只是在添加一些在父级中指定的设置吗?

提出这个问题的动机是我想知道如何使用jacoco插件,在根POM文件中指定一些通用设置“-Xmx1G”,而在子项目中,他们可以添加其他特定于该子项目的参数到通用参数中。参考:https://dev59.com/m2ct5IYBdhLWcg3wNqsg#29975159

我想我可以重命名jacoco生成的参数(https://dev59.com/m2ct5IYBdhLWcg3wNqsg#25571295,“propertyName”设置,将其从argLine更改),然后我就可以使用父级的${argLine}并将其添加到jacococ一个中,但我的问题还是有意思的...

4个回答

1

属性应该直接在您的子POM中可见:${argLine}


不幸的是,如果我使用<properties><argLine>${argLine}子参数</argLine>,它会响应以下错误:${argLine}:在'argLine'中检测到以下递归表达式循环。 - rogerdpack
可能这个错误与你的属性调用的东西有关,比如一个Maven变量http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#argLine。尝试重命名它。 - alexey

0
我能想到的唯一方法是在父级中复制该参数。

所以父级:

<properties>
   <argLine>some args</argLine>
   <parentArgLine>some args</parentArgLine>
</properties>

然后使用

<properties>
   <argLine>${parentArgLine} some child args</argLine>

在子级中。

在我的特定情况下,问题是一个插件“覆盖”了一个Maven变量。


我想知道你是否可以在层次结构中添加另一个级别来创建所述的复制,但是我还没有尝试过。 - rogerdpack

0
在您的父POM中使用pluginManagement,并在其中指定配置。它们将适用于父级中的所有模块。

我想我可以在父级中设置一个名为“其他名称”的属性,然后在父级中将其作为“正确的名称”引用,如果我需要在子级中修改它,则像<properties><argLine>${parentArgLine} myArgs</argLine>这样引用原始内容。有趣。但是这仍然比我想要的多了一些步骤(您必须知道它在父级中被称为什么等),但很有趣! - rogerdpack

0

使用 Maven 3,您可以使用 ${project.parent.propertyName} link


1
在纸上看起来完美,就像“应该可以正常工作”,但我实际上并没有运气让它这样做(maven 3.2),你有任何可能展示它工作的小例子吗?谢谢! - rogerdpack

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