2010-11-18 4 views
4

ich ein Maven-Projekt mit der folgenden Struktur erstellen möchten:definieren Eigenschaften in Maven auf anderen Eigenschaft abhängig Werte

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

wobei A, B und C-Ordner sind, und B pom.xml und C der pom.xml sind Kinder von A's pom.xml. Ich möchte in B pom.xml den folgenden Abschnitt haben:

<properties> 
    <some.property>B</some.property> 
</properties> 

Und in C:

<properties> 
    <some.property>C</some.property> 
</properties> 

Und ich in einem etwas will den Wert von mehreren anderen Eigenschaften zu definieren, basierend auf dem Wert von etwas Eigentum. So zum Beispiel in der Pseudo-Code, würde ein etwas tun:

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' 
... 

Ich möchte die MVN Neuinstallation unter Bezugnahme auf eine der pom.xml laufen (die einen Modulabschnitt enthält nach B und C zeigt), so, Soweit ich weiß, kann ich dafür keine Profile verwenden (da in maven2 Projekte, die im gleichen Reaktor laufen, das gleiche aktive Profil erben. Ich kann maven3 verwenden, konnte aber nicht finden, wenn sich irgendetwas ändert).

Hat jemand eine Idee, wie man das macht?

Danke,

Antwort

6

Out of the box, Maven kann dies nicht tun, und Abhilfen entmutigt werden (die Eigenschaften sind nicht während des Lebenszyklus ändern soll).

Es gibt jedoch einige Problemumgehungen, mein Favorit ist die gmaven plugin, die Sie embed Groovy code in the pom können.

Das folgende Codefragment die Eigenschaft ‚abc‘ gesetzt werden, um entweder ‚bar‘ oder ‚Baz‘, je nachdem, ob die Eigenschaft ‚def‘ enthält ‚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, die Dokumentation sind veraltet, die Plugin-Version ist jetzt 1.3 und die GroupId hat sich geändert. Hier ist the current version.

+0

Es funktioniert jedoch nicht perfekt. Wenn ich es verwenden wollte, um Abhängigkeiten mit einem Gültigkeitsbereich zu importieren, der durch eine der Variablen definiert wurde, die ich in der Validierungsphase definiert hatte, brach es. Ich nehme an, Abhängigkeitsauflösung tritt auf, bevor ein solches Skript ausgeführt werden kann. – Rafael

+1

Ja, ich denke schon. Um dies zu erreichen, müssten Sie programmatisch über die Abhängigkeiten iterieren und Platzhalter durch Eigenschaftswerte^shudder^ersetzen. aber Sie könnten die Abhängigkeiten programmatisch an erster Stelle erstellen. –

Verwandte Themen