Mam profil w moim pom.xml, który powinien być zawsze aktywny, chyba że zostanie wyraźnie dezaktywowany (-P! FirstProfile). Rozwiązałem to za pomocą flagi activeByDefault:
<profiles>
<profile>
<id>firstProfile</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
...
</profile>
</profiles>
Teraz w tym samym pom.xml mam zdefiniowany drugi profil, który powinien być aktywny tylko wtedy, gdy profil jest naprawdę aktywowany (-P secondProfile). Więc domyślne zachowanie to: firstProfile aktywny, secondProfile nieaktywny. W innym miejscu chciałbym aktywować drugi profil oprócz pierwszego profilu. Teraz problem polega na tym, że jeśli zrobię to z "-P secondProfile", to firstProfile zostanie niestety dezaktywowane. Dokumentacja Mavena stwierdza, że:
... Ten profil będzie automatycznie aktywny dla wszystkich kompilacji, chyba że inny profil w tym samym POM zostanie aktywowany jedną z wcześniej opisanych metod. Wszystkie profile, które są domyślnie aktywne, są automatycznie dezaktywowane, gdy profil w POM jest aktywowany w linii poleceń lub poprzez jego konfigurację aktywacji. ...
Czy jest jakaś możliwość, aby pierwszy profil był zawsze aktywny (bez konieczności deklarowania go w settings.xml)?
Odpowiedzi:
Jedną sztuczką jest unikanie
activeByDefault
i zamiast tego aktywowanie profilu przez brak właściwości, np .:Powinieneś wtedy móc dezaktywować profil za pomocą
-DskipFirstProfile
lub za pomocą-P !firstProfile
, ale w przeciwnym razie profil będzie aktywny.Zobacz: Maven: The Complete Reference, Profile Activation - Activation by the Brak Property
źródło
firstProfile
jest wyłączony tylko wtedy, gdy określisz-DskipFirstProfile
(npmvn verify -DskipFirstProfile
.).Żałuję, że nie było takiej możliwości, często mi ją brakowało. Jedyny istotny problem dotyczący JIRA, jaki udało mi się znaleźć, to ten:
I został rozwiązany jako
Not A Problem
.Przestałem używać
activeByDefault
, ponieważ podejście typu „wszystko albo nic” sprawiło, że było to dla mnie bezwartościowe.Jedynym sposobem zmiany tego zachowania jest napisanie własnego zamiennika
DefaultProfileSelector
, zarejestrowanie go jako komponentu splotu@Component( role = ProfileSelector.class )
i umieszczenie go w nim${MAVEN_HOME}/lib/ext
(w ten sposób zostanie wybrany jako domyślny selektor profilu). (Jeśli używasz Maven 3.0.2 lub starszego, będziesz musiał również edytować,${MAVEN_HOME}/bin/m2.conf
aby załadować,lib/ext
zanim się załadujelib
)źródło
To pytanie jest starożytne, ale wydaje się, że problem można rozwiązać za pomocą
activeProfile
zamiastactiveByDefault
. Jestem na Maven 3.3.9, ale rozwiązanie może działać na wcześniejszych wersjach.Po prostu wpisz swoje
activeProfiles
w swoimsettings.xml
, na przykład:W
my-awesome-profile
mam ustawienia, takie jak adresy URL baz danych i tak dalej, więc zawsze mają zastosowanie. Tutaj aktywuję drugi profilresolve-from-central
:Zwróć uwagę, jak
my-awesome-profile
jest nadal aktywny. Yay!źródło
Możesz po prostu wyświetlić wszystkie profile, które chcesz aktywować w wierszu poleceń, takie jak:
-P profil-1, profil-2
maven został zaprojektowany tak, aby umożliwić automatyczną aktywację wielu profili, jeśli jednak zastąpisz to opcją -P, aktywowane zostaną tylko profile wymienione w parametrze.
źródło
-P
tylko z dezaktywacją<activeByDefault>
profili. Profile aktywowane przez<activeProfiles>
insettings.xml
lub przez jakikolwiek inny typ<activation>
pozostają aktywne, chyba że zostaną wyraźnie dezaktywowane.Profile to dobry sposób na uporządkowanie POM. Zwłaszcza jeśli używasz wielu wykonań tej samej wtyczki do różnych celów.
Korzystanie z plików:
Tak będzie zawsze (chyba że ktoś usunie katalog podczas rozruchu Mavena :). Testowane z Maven 3.6.0.
Może to być również dobry sposób na rozróżnienie typów projektów. Na przykład mój projekt był zawsze
module.json
obecny.Korzystanie z rozszerzenia aktywującego profil
Istnieje kilka rozszerzeń Maven do aktywacji profilu. Jeden z nich w widelcu tutaj:
https://github.com/OndraZizka/el-profile-activator-extension
źródło
<file><exists>.</exists></file>
Nie możesz zachować aktywnego profilu domyślnego, ale możesz wziąć zawartość tego profilu (w Twoim przykładzie) i po prostu przenieść go do głównej sekcji pliku pom.
Tylko dlatego, że używasz profili, nie oznacza, że wszystko, co robisz, musi znajdować się w profilu.
źródło