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?
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:
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).
Nur eine verrückte Idee: Module verwenden
Definieren Sie ein Elternteil pom
wie folgt:
Definieren Sie die gewünschten Erweiterungen für pom1
und pom2
.
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%Tags und Links maven build-process maven-3 maven-profiles maven-extension