J'ai un profil dans mon pom.xml qui devrait être toujours actif à moins qu'il ne soit explicitement désactivé (-P! FirstProfile). J'ai résolu cela en utilisant l'indicateur activeByDefault:
<profiles>
<profile>
<id>firstProfile</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
...
</profile>
</profiles>
Maintenant, dans le même pom.xml, j'ai un deuxième profil défini, cela ne devrait être actif que si le profil est vraiment activé (-P secondProfile). Le comportement par défaut est donc: firstProfile actif, secondProfile inactif. À un autre moment, j'aimerais activer le deuxième profil en plus du premier profil. Maintenant, le problème est que si je fais cela avec "-P secondProfile" le firstProfile est malheureusement désactivé. La documentation Maven indique ceci:
... Ce profil sera automatiquement actif pour toutes les versions à moins qu'un autre profil du même POM ne soit activé en utilisant l'une des méthodes décrites précédemment. Tous les profils actifs par défaut sont automatiquement désactivés lorsqu'un profil dans le POM est activé sur la ligne de commande ou via sa configuration d'activation. ...
Existe-t-il en quelque sorte une possibilité de garder le firstProfile toujours actif (sans avoir à le déclarer dans le settings.xml)?
Réponses:
Une astuce consiste à éviter
activeByDefault
et à activer le profil par l'absence de propriété, par exemple:Vous devriez alors pouvoir désactiver le profil avec
-DskipFirstProfile
ou avec-P !firstProfile
, sinon le profil sera actif.Voir: Maven: The Complete Reference, Profile Activation - Activation by the Absence of a Property
la source
firstProfile
est désactivé uniquement si vous spécifiez-DskipFirstProfile
(par exemplemvn verify -DskipFirstProfile
).J'aurais aimé qu'il y ait une telle possibilité, je l'ai souvent ratée. Le seul problème JIRA pertinent que j'ai pu trouver est celui-ci:
Et cela a été résolu comme
Not A Problem
.J'ai arrêté d'utiliser
activeByDefault
, parce que cette approche «tout ou rien» la rendait sans valeur pour moi.La seule façon de changer ce comportement est d'écrire votre propre remplacement pour
DefaultProfileSelector
, de l'enregistrer en tant que composant plexus avec@Component( role = ProfileSelector.class )
et de le mettre${MAVEN_HOME}/lib/ext
(de cette façon, il sera choisi comme sélecteur de profil par défaut). (Si vous utilisez Maven 3.0.2 ou une version antérieure, vous devrez également modifier${MAVEN_HOME}/bin/m2.conf
pour le chargerlib/ext
avant de le chargerlib
)la source
Cette question est ancienne, mais il semble que le problème puisse être résolu en utilisant
activeProfile
plutôt queactiveByDefault
. Je suis sur Maven 3.3.9, mais la solution peut fonctionner sur des versions antérieures.Énumérez simplement votre
activeProfiles
dans votresettings.xml
, comme ceci:Dans
my-awesome-profile
j'ai des paramètres tels que les URL de base de données, etc., ils s'appliquent donc toujours . Ici, activer un second profil,resolve-from-central
:Remarquez comment
my-awesome-profile
est toujours actif. Yay!la source
Vous pouvez simplement lister tous les profils que vous souhaitez activer sur la ligne de commande en tant que tels:
-P profil-1, profil-2
maven a été conçu pour permettre l'activation automatique de plusieurs profils, si toutefois vous remplacez cela avec le -P, seuls les profils répertoriés dans le paramètre sont activés.
la source
-P
uniquement des<activeByDefault>
profils de désactivation . Les profils activés par<activeProfiles>
danssettings.xml
ou par tout autre type de<activation>
restent actifs sauf s'ils sont explicitement désactivés.Les profils sont un bon moyen de mettre de l'ordre dans POM. Surtout si vous utilisez plusieurs exécutions du même plugin à des fins différentes.
Utilisation de fichiers:
Ce sera toujours vrai (sauf si quelqu'un supprime le répertoire lors du démarrage de Maven :). Testé avec Maven 3.6.0.
Cela pourrait également être un bon moyen de différencier les types de projets. Par exemple, mon projet a toujours été
module.json
présent.Utilisation d'une extension d'activation de profil
Il existe quelques extensions Maven pour l'activation de profil. L'un d'eux dans une fourchette ici:
https://github.com/OndraZizka/el-profile-activator-extension
la source
<file><exists>.</exists></file>
Vous ne pouvez pas garder le profil par défaut actif, mais vous pouvez prendre le contenu de ce profil (le ... dans votre exemple) et le déplacer simplement vers la section principale du pom.
Ce n'est pas parce que vous utilisez des profils que tout ce que vous faites doit être inclus dans un profil.
la source