我想创建一个具有以下结构的maven项目:
A
|--pom.xml
|--B
|--pom.xml
|--C
|--pom.xml
其中A,B和C是文件夹,B的pom.xml和C的pom.xml是A的pom.xml的子代。我想在B的pom.xml中有以下部分:
<properties>
<some.property>B</some.property>
</properties>
在C:
<properties>
<some.property>C</some.property>
</properties>
我希望在A中根据某些属性的值来定义其他几个属性的值。例如,在伪代码中,A会做这样的事情:
if ( some.property == 'B') then
some.other.property = 'some-value-based-on-b'
else if ( some.property == 'C') then
some.other.property = 'some-value-based-on-c'
...
我想运行mvn clean install,引用A的pom.xml(其中包含一个指向B和C的模块部分),因此,据我所知,我不能使用配置文件(因为在maven2项目中运行)在同一个反应堆中继承相同的活动配置文件。我可以使用maven3,但无法找到它是否有任何变化)。
有谁知道怎么做?
谢谢,
答案 0 :(得分:7)
开箱即用,maven无法做到这一点,并且不建议使用变通方法(在生命周期中属性不应该更改)。
但有几种解决方法,我最喜欢的是gmaven plugin,它可以让你embed Groovy code in the pom。
以下代码段会将属性'abc'设置为'bar'或'baz',具体取决于属性'def'是否包含'foo':
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>gmaven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source><![CDATA[
pom.properties['abc']=
pom.properties['def'].contains('foo') ? 'bar' : 'baz';
]]></source>
</configuration>
</execution>
</executions>
</plugin>
BTW,文档已经过时,插件版本现在为1.3,groupId已经更改。这是the current version。