Определите свойства в Maven в зависимости от других значений свойств - PullRequest
5 голосов
/ 18 ноября 2010

Я хочу создать проект maven со следующей структурой:

A
|--pom.xml
|--B
   |--pom.xml
|--C
   |--pom.xml

, где A, B и C - папки, а B's pom.xml и C's pom.xml - потомки A's pom.xml.,Я хочу иметь в pom.xml B следующий раздел:

<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, ссылаясь на pom.xml A (который содержит раздел модуля, указывающий на B и C),поэтому, насколько я понимаю, я не могу использовать профили для этого (поскольку в проектах maven2, работающих в одном и том же реакторе, наследуется один и тот же активный профиль. Я могу использовать maven3, но не могу найти, если это что-то меняет).

Кто-нибудь знает, как это сделать?

Спасибо,

1 Ответ

7 голосов
/ 18 ноября 2010

Из коробки 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>

Кстати, документы устарели, версия плагина теперь 1.3, а идентификатор группы изменился. Вот текущая версия .

...