2013-09-05 39 views
19

是否可以在不更改模块pom的情况下从父pom覆盖模块属性?在Maven中从父POM覆盖模块属性

例如:

模块POM(我不能改变它在所有):

<properties> 
    <someProperty>some value to be replaced</properties> 
</properties> 

父POM:

<properties> 
    <someProperty>strongValue</someProperty> <!-- some magic here --> 
</properties> 

有效模块POM:

<properties> 
    <someProperty>strongValue</someProperty> 
</properties> 

如果是,那么如何实现它?

回答

8

我知道这样做的唯一方法就是在命令行上定义属性,例如, mvn -DsomeProperty=strongValue <mvn goals/phases here>

您可以尝试在父级中定义的配置文件;我怀疑这将无济于事。

+1

thx,但我需要覆盖它从父POM,而不是从命令行(如问题所述) – zacheusz

+1

我认为你是运气不好。 – user944849

+1

在父级配置文件中定义属性并启用配置文件似乎并未激活子项目中的属性。 –

8

不,你不能。这个想法是,如果它不应该可以重写一个值,不要使用一个属性。如果您没有其他选择,则可能需要使用http://maven.apache.org/enforcer/enforcer-rules/requireProperty.html强制执行此操作,如果属性的值与预期值不同,则会破坏构建。

+1

你是什么意思,你不能?我们一直这样做,它的工作。 当然你可以重写父pom属性。刚刚检查了我父母的一个项目,因为你让我怀疑。它确实有效。我的有效pom显示了被忽略的价值。 – Lawrence

+2

我想你误解了这个问题。尝试读取它:可以一个属性是最终的(如在Java中),所以它不能被孩子覆盖?对于这个问题,答案是“不”。 –