Maven 3 Profil mit Erweiterungen

9

Meine Frage wurde in diesem Thread behandelt, aber der Erklärung ist nicht klar.

Ich habe diese Build-Definition in einer meiner pom.xml-Dateien:

%Vor%

Beachten Sie, dass ich die Erweiterung maven-s3-wagon verwende. Als nächstes möchte ich 2 verschiedene Profile haben, jedes mit eigenen Einstellungen, Plugins und Erweiterungen, aber maven erlaubt das Extension-Tag nicht unter einem Profil.

Wenn ich versuche, ein Profil zu verwenden:

%Vor%

Ich bekomme einen Fehler in meinem Pom:

%Vor%

Frage Wenn ich also das Extension-Tag verwende, kann ich keine Profile verwenden? Wie kann ich Build-Erweiterungen über ein Profil verwenden oder ändern?

    
forhas 14.07.2013, 13:23
quelle

3 Antworten

4

Tatsächlich ist die offizielle Maven POM-Referenz nicht klar über die mögliche Verwendung von extensions als Teil von ein Maven-Profil, da es besagt, dass Sie ein build -Element darin haben können, aber nicht was vom build -Abschnitt.

Aber das offizielle Maven-Modell filtert effektiv und liefert was von build Abschnitt, den Sie tatsächlich in einem Abschnitt profile verwenden können. Und tatsächlich ist extensions nicht da .

Was sind Maven Erweiterungen? Build / Lifecycle-Erweiterung, aber auch (und im Wesentlichen): eine Bibliothek, die dem Laufzeitklassenpfad des Maven-Builds hinzugefügt wurde, der am Build beteiligt ist, aber nicht mit dem endgültigen Artefakt verpackt ist.

In einem solchen Szenario (wenn Sie Erweiterungen im Profil haben oder ein Profil haben müssen, um eine Erweiterung zu ändern / hinzuzufügen), könnten Sie den folgenden Trick verwenden:

  • Haben Sie eine harmlose Erweiterung als Standard-Erweiterung Ihres Builds (wobei harmlos jede Bibliothek bedeutet, die Teil Ihres Build-Klassenpfads sein könnte und diese im Grunde überhaupt nicht beeinflusst)
  • Eigenschaften, die die GAV-Koordinaten definieren ( G roupId, A rtifactId, V Version) dieser Erweiterung
  • Verfügen Sie über ein Profil, das diese Eigenschaften mit der gewünschten (nützlichen) Erweiterung
  • überschreibt

Als Beispiel wird das folgende POM-Beispiel angegeben:

%Vor%

Der Standard-Build (ohne das customize-extension -Profil aktiviert) würde den standardmäßig definierten properties verwenden und so junit als Build-Erweiterung hinzufügen: das ist harmlos (obwohl es Konflikte mit einem anderen junit -Version verursachen kann) von Ihrem Build, also stellen Sie sicher, dass Sie die gleiche Version verwenden, verwenden Sie eine noch harmlosere Bibliothek dafür).

Sie können überprüfen, ob Maven es abholt, indem Sie eine wirklich Build-Phase ausführen , nur um die Informationen in unserem Fall zu prüfen und das Debug-Flag zu aktivieren:

%Vor%

Und Überprüfung als Teil des Build-Protokolls:

%Vor%

Lasst uns nun unseren Trick verwenden: Lassen Sie uns eine Build-Erweiterung über das Profil hinzufügen (ändern):

%Vor%

Und als Teil unseres Build-Logs hätten wir:

%Vor%

Bingo. Maven hat eine andere Erweiterung (in diesem Fall eine andere Version, 4.12 ) ausgewählt und es ist uns gelungen, eine Build-Erweiterung über das Profil zu ändern (oder tatsächlich hinzuzufügen).

    
A_Di-Matteo 27.03.2016, 21:41
quelle
0

Nur eine verrückte Idee: Module verwenden

Definieren Sie ein Elternteil pom wie folgt:

%Vor%

Definieren Sie die gewünschten Erweiterungen für pom1 und pom2 .

    
Marcos Zolnowski 24.07.2013 03:29
quelle
0

Ich denke, die Lösung ist hier Ссылка

Definieren Sie einen Build-Abschnitt, in dem Erweiterungen definiert sind, und setzen Sie dann das Attribut im Attribut auf true (wie im zweiten Profil unten)

%Vor%     
darkman97i 09.12.2016 13:12
quelle