Ich habe ein Profil in meiner pom.xml, das immer aktiv sein sollte, es sei denn, es ist explizit deaktiviert (-P! FirstProfile). Ich habe dies mithilfe des ActiveByDefault-Flags gelöst:
<profiles>
<profile>
<id>firstProfile</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
...
</profile>
</profiles>
Jetzt habe ich in derselben pom.xml ein zweites Profil definiert, das nur aktiv sein sollte, wenn das Profil wirklich aktiviert ist (-P secondProfile). Das Standardverhalten lautet also: firstProfile active, secondProfile inactive. An einer anderen Stelle möchte ich das zweite Profil zusätzlich zum ersten Profil aktivieren. Das Problem ist nun, dass wenn ich das mit "-P secondProfile" mache, das firstProfile leider deaktiviert wird. In der Maven-Dokumentation heißt es:
... Dieses Profil ist automatisch für alle Builds aktiv, es sei denn, ein anderes Profil im selben POM wird mit einer der zuvor beschriebenen Methoden aktiviert. Alle Profile, die standardmäßig aktiv sind, werden automatisch deaktiviert, wenn ein Profil im POM in der Befehlszeile oder über seine Aktivierungskonfiguration aktiviert wird. ...
Gibt es eine Möglichkeit, das firstProfile immer aktiv zu halten (ohne es in der settings.xml deklarieren zu müssen)?
Antworten:
Ein Trick besteht darin
activeByDefault
, das Profil durch das Fehlen einer Eigenschaft zu vermeiden und stattdessen zu aktivieren, z.Sie sollten dann in der Lage sein, das Profil mit
-DskipFirstProfile
oder mit zu deaktivieren-P !firstProfile
, andernfalls ist das Profil aktiv.Siehe: Maven: Die vollständige Referenz, Profilaktivierung - Aktivierung durch das Fehlen einer Eigenschaft
quelle
firstProfile
ist nur deaktiviert, wenn Sie angeben-DskipFirstProfile
(zmvn verify -DskipFirstProfile
. B. ).Ich wünschte, es gäbe eine solche Möglichkeit, ich habe sie oft verpasst. Das einzige relevante JIRA-Problem, das ich finden konnte, ist das folgende:
Und es wurde gelöst als
Not A Problem
.Ich habe aufgehört zu verwenden
activeByDefault
, weil dieser "Alles oder Nichts" -Ansatz es für mich wertlos machte.Die einzige Möglichkeit, dieses Verhalten zu ändern, besteht darin, einen eigenen Ersatz für zu schreiben
DefaultProfileSelector
, ihn als Plexuskomponente bei zu registrieren@Component( role = ProfileSelector.class )
und einzufügen${MAVEN_HOME}/lib/ext
(auf diese Weise wird er als Standardprofilauswahl ausgewählt). (Wenn Sie Maven 3.0.2 oder älter verwenden, müssen Sie vor${MAVEN_HOME}/bin/m2.conf
dem Laden auch bearbeiten , umlib/ext
es zu laden.lib
)quelle
Diese Frage ist uralt, aber es scheint, dass das Problem
activeProfile
eher durch Verwendung als durch gelöst werden kannactiveByDefault
. Ich bin auf Maven 3.3.9, aber die Lösung funktioniert möglicherweise auf früheren Versionen.Listen Sie einfach Ihre
activeProfiles
in Ihremsettings.xml
, wie folgt:In habe
my-awesome-profile
ich Einstellungen wie Datenbank-URLs und so weiter, so dass sie immer gelten. Hier aktiviere ich ein zweites Profilresolve-from-central
:Beachten Sie, wie
my-awesome-profile
noch aktiv ist. Yay!quelle
Sie können einfach alle Profile, die Sie aktivieren möchten, in der Befehlszeile als solche auflisten:
-P Profil-1, Profil-2
maven wurde entwickelt, um die automatische Aktivierung mehrerer Profile zu ermöglichen. Wenn Sie dies jedoch mit -P überschreiben, werden nur die im Parameter aufgeführten Profile aktiviert.
quelle
-P
nur deaktivierten<activeByDefault>
Profilen. Profile, die von<activeProfiles>
insettings.xml
oder von einem anderen Typ aktiviert wurden,<activation>
bleiben aktiv, sofern sie nicht ausdrücklich deaktiviert werden.Profile sind ein guter Weg, um Ordnung in POM zu bringen. Insbesondere, wenn Sie mehrere Ausführungen desselben Plugins für unterschiedliche Zwecke verwenden.
Verwenden von Dateien:
Dies ist immer der Fall (es sei denn, jemand löscht das Verzeichnis während des Maven-Starts :). Getestet mit Maven 3.6.0.
Dies kann auch eine gute Möglichkeit sein, zwischen Projekttypen zu unterscheiden. Zum Beispiel war mein Projekt immer
module.json
präsent.Verwenden einer Profilaktivierungserweiterung
Es gibt einige Maven-Erweiterungen für die Profilaktivierung. Eine davon in einer Gabelung hier:
https://github.com/OndraZizka/el-profile-activator-extension
quelle
<file><exists>.</exists></file>
Sie können das Standardprofil nicht aktiv halten, aber Sie können den Inhalt dieses Profils (das ... in Ihrem Beispiel) nehmen und es einfach in den Hauptabschnitt des POM verschieben.
Nur weil Sie Profile verwenden, bedeutet dies nicht, dass sich alles, was Sie tun, in einem Profil befinden muss.
quelle