Comment conserver les profils Maven qui sont activeByDefault actifs même si un autre profil est activé?

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 ce problème en utilisant le drapeau activeByDefault:

  firstProfile  true  ...   

Maintenant, dans le même fichier pom.xml, j’ai un deuxième profil défini, qui ne devrait être actif que si le profil est réellement activé (-P secondProfile). Le comportement par défaut est donc: firstProfile active, secondProfile inactive. À un autre moment, je voudrais activer le deuxième profil en plus du premier profil. Maintenant, le problème est que si je le fais avec “-P secondProfile”, le premier profil est malheureusement désactivé. La documentation de Maven indique ceci:

… Ce profil sera automatiquement actif pour toutes les versions, sauf si un autre profil dans le même POM est 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. …

Y a-t-il une possibilité quelconque de garder le firstProfile toujours actif (sans avoir à le déclarer dans le fichier settings.xml)?

Une astuce consiste à éviter activeByDefault et à activer le profil en l’absence d’une propriété, par exemple:

   firstProfile   !skipFirstProfile   ...   

Vous devriez alors pouvoir désactiver le profil avec -DskipFirstProfile ou avec -P !firstProfile , mais sinon le profil sera actif.

Voir: Maven: la référence complète, l’activation du profil – Activation par l’absence d’une propriété

Je souhaite qu’il y ait une telle possibilité, je l’ai souvent manqué. Le seul problème JIRA pertinent que je pourrais trouver est celui-ci:

MNG-4917: Le profil n’est pas actif même si activeByDefault est défini sur true

Et ce Not A Problem été résolu.

J’ai cessé d’utiliser activeByDefault , car cette approche “tout ou rien” l’a rendu inutile.


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 placer dans ${MAVEN_HOME}/lib/ext (comme cela 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 charger lib/ext avant de charger lib )

Vous pouvez simplement répertorier 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 de plusieurs profils automatiquement, si toutefois vous remplacez celui avec -P, seuls les profils répertoriés dans le paramètre sont activés.

Cette question est ancienne, mais il semble que le problème activeProfile résolu en utilisant activeProfile plutôt activeByDefault . Je suis sur Maven 3.3.9, mais la solution peut fonctionner sur les versions antérieures.

activeProfiles simplement vos activeProfiles dans votre activeProfiles settings.xml , comme ceci:

   [...]   my-awesome-profile   

Dans my-awesome-profile j’ai des parameters tels que les URL de firebase database, etc., ils s’appliquent donc toujours . Ici, j’active un second profil, resolve-from-central :

 $ mvn help:all-profiles -P resolve-from-central [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Stub Project (No POM) 1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-help-plugin:2.2:all-profiles (default-cli) @ standalone-pom --- [INFO] Listing Profiles for Project: org.apache.maven:standalone-pom:pom:1 Profile Id: resolve-from-central (Active: true , Source: settings.xml) Profile Id: my-awesome-profile (Active: true , Source: settings.xml) Profile Id: resolve-from-internal (Active: false , Source: settings.xml) 

Notez comment my-awesome-profile est toujours actif. Yay!

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 dans la section principale du pom.

Tout simplement parce que vous utilisez des profils, cela ne signifie pas que tout ce que vous faites doit être dans un profil.