根据其他属性值在maven中定义属性

Raf*_*ael 5 java maven-2 properties

我想创建一个具有以下结构的maven项目:

A
|--pom.xml
|--B
   |--pom.xml
|--C
   |--pom.xml
Run Code Online (Sandbox Code Playgroud)

其中A,B和C是文件夹,B的pom.xml和C的pom.xml是A的pom.xml的子代.我想在B的pom.xml中有以下部分:

<properties>
   <some.property>B</some.property>
</properties>
Run Code Online (Sandbox Code Playgroud)

而在C:

<properties>
   <some.property>C</some.property>
</properties>
Run Code Online (Sandbox Code Playgroud)

我希望在某个东西中根据某些属性的值来定义其他几个属性的值.因此,例如,在伪代码中,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'
...
Run Code Online (Sandbox Code Playgroud)

我想运行MVN全新安装指的是的pom.xml(其中包含一个模块部分指向B和C),所以,据我了解,我不能在maven2的项目中使用的配置文件为这个(因为在相同的运行reactor继承了相同的活动配置文件.我可以使用maven3,但是如果它改变了什么就找不到).

有谁知道如何做到这一点?

谢谢,

Sea*_*oyd 7

开箱即用,maven无法做到这一点,并且不建议使用变通方法(属性不应该在生命周期中改变).

有几种解决方法,我最喜欢的是gmaven插件,它允许你将Groovy代码嵌入到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>
Run Code Online (Sandbox Code Playgroud)

顺便说一下,文档已经过时,插件版本现在为1.3,groupId已经更改.这是当前版本.