Wie bekomme ich Maven 2, um 2 separate WAR-Dateien zu erstellen?

7

Wenn ich mvn install mache, möchte ich 2 WAR-Dateien in meinem Zielverzeichnis haben. Einer enthält die Produktion web.xml und der andere enthält den test / uat web.xml .

Ich habe es versucht:

%Vor%

Aber ich habe nur den Test WAR.

    
TiGz 10.12.2009, 16:47
quelle

6 Antworten

16

Ich glaube nicht, dass Sie das in einem Schritt tun können (eigentlich bin ich überrascht, dass Maven sich nicht über Ihr Setup beschwert und sich fragt, welches Programm angewendet wird) und ich würde vorschlagen, Profile zu verwenden und vielleicht zu filtern Verwalten Sie diesen Anwendungsfall.

Wenn deine web.xml wirklich unterschiedlich sind, kannst du deine maven-war-plugin-Konfiguration in zwei Profile setzen. Oder, besser, könnten Sie sie in etwas wie das zusammenführen:

%Vor%

Und setzen Sie die env -Eigenschaft in zwei Profilen, um die richtige web.xml zur Build-Zeit aufzunehmen.

%Vor%

Wenn Ihre web.xml ähnlich sind (d. h. wenn sich nur Werte in ihnen unterscheiden), können Sie Eigenschaften und ihre Werte in zwei Profilen definieren und sie mithilfe von Filtern anwenden. Etwas wie das:

%Vor%

Aktivieren Sie dann das eine oder das andere Profil, indem Sie die env-Eigenschaft in der Befehlszeile übergeben, z. B .:

%Vor%

Eine andere Option wäre, die Werte in bestimmte Filter zu setzen und die richtige zur Erstellungszeit auszuwählen (wie in diesem Beitrag) ).

Es gibt wirklich viele Möglichkeiten, aber wie gesagt, ich glaube nicht, dass Sie das tun können, ohne den Build zweimal zu starten.

Weitere Ressourcen zu Profilen / Filtern:

Pascal Thivent 10.12.2009, 16:53
quelle
6

Sie können dem Maven Assembly-Plugin mitteilen, dass es einfach zwei Assemblys generieren soll. Sie schreiben einfach eine Assembly-Deskriptordatei für jede Ausgabe, die Sie erstellen möchten, und listen sie in der Plugin-Konfiguration auf.

Zum Beispiel verwende ich es, um eine WAR-Datei und eine TGZ-Datei zu generieren, aber es gibt keinen Grund, warum Sie nicht zwei WARs auf die gleiche Weise machen können. Das mvn-Paket erzeugt dann beide Dateien.

%Vor%     
Ben Hardy 08.01.2013 22:47
quelle
2

Ich würde generell vorschlagen, Profile zu verwenden und zwei dedizierte Builds auszuführen. Es sollte jedoch möglich sein, eine beliebige Anzahl von Artefakten mit dem Maven-Assembly-Plugin .     

sfussenegger 10.12.2009 17:13
quelle
0

Ich denke, dies kann nur erreicht werden, indem man ein benutzerdefiniertes Maven-Plugin schreibt oder den Build-Lebenszyklus stört und den War-Assembly-Prozess zweimal ausführt (dies ist nur eine schwache Idee).

Vielleicht könnten Sie zwei Profile erstellen und das Ziel zweimal mit verschiedenen Profilen ausführen ( mvn -P prof1 package , mvn -P prof2 package ), aber seien Sie vorsichtig mit den generierten Artefaktnamen, sie sollten nicht überschrieben werden. Oder Sie können möglicherweise ein benutzerdefiniertes Plugin erstellen, das andere Plugins verwendet und die beiden War-Dateien zusammenfügt.

    
Tamas Mezei 10.12.2009 16:57
quelle
0

Ich benutze zwar nicht Maven, aber Ivy , stattdessen sollten Sie Folgendes tun:

Lassen Sie Ihre eigene Anwendung in einem privaten Repository / ähnlich wie JAR mit ihren Abhängigkeiten / anderen statischen Inhalten veröffentlichen und dann individuelle Projekteinstellungen für die Erstellung der implementierungsspezifischen WARs der Anwendung mit kontextspezifischen Konfigurationen. Indem Sie nun eines der einzelnen Bereitstellungsprojekte erstellen, erhalten Sie die aktuelle Version Ihrer tatsächlichen Anwendung mit ihren spezifischen Build-Konfigurationen.

Ich gehe davon aus, dass Maven, da dies in Ivy trivial ist, es genauso leicht machen könnte.

    
Esko 10.12.2009 17:39
quelle
0

Sort-of-hässlicher Hack (er bricht Mavens Idee, Absichten statt Aktionen zu deklarieren), arbeitete aber für mich: Ich musste zwei Kriege generieren, die die gleiche Backend-Codebasis hatten, aber auf den MVC-Controller-Paketen variierten .

Nachdem ich meinen Kopf mit mehreren Plugins geschlagen hatte, dachte ich "Hey, ich würde es leicht in Ameisen machen", was mich dazu brachte, <maven-antrun-plugin> zu benutzen, um die Kriege während der "Paket" -Phase zu erzeugen alle Dateien). So ungefähr:

%Vor%

(Um fair zu sein, ich habe die Originaldatei nicht gelöscht, aber Sie sollten dazu in der Lage sein.)

In Ihrem Fall könnten Sie einen Krieg ohne die alternative web.xml verpacken, umbenennen / über die ursprüngliche web.xml verschieben und dann den zweiten Krieg verpacken.

    
chesterbr 26.12.2009 04:23
quelle

Tags und Links