web-dev-qa-db-fra.com

Maven - Puis-je référencer l'ID de profil dans la définition de profil?

J'ai défini des profils dans un pom.xml, comme illustré ci-dessous:

<profile>
<id><em>profileId1</em></id>
    <build>
        <filters>
            <filter>src/main/filters/<em>profileId1</em>.properties</filter>
        </filters>
// rest of the profile 
</profile>
<profile>
<id><em>profileId2</em></id>
    <build>
        <filters>
            <filter>src/main/filters/<em>profileId2</em>.properties</filter>
        </filters>
// rest of the profile
</profile>

Question:

Existe-t-il un moyen d'extraire cette pièce de tous les profils, de sorte qu'il n'est pas nécessaire de la répéter pour chaque profil (et éventuellement de l'orthographier)?

39
Ula Krukar

Avec maven 2.2.1 et versions ultérieures, j'ai pu obtenir l'ID du premier profil actif en utilisant:

${project.activeProfiles[0].id}

Bien sûr, cela échoue s'il n'y a pas au moins un profil actif.

En utilisant le

${project.profiles[0].id}

comme l'a suggéré Pascal n'a pas travaillé pour moi.

Astuce: En enquêtant sur cela, j'ai vraiment commencé à aimer mvn help:evaluate.

34
alfonx

Comme alternative à ${project.activeProfiles[0].id} (qui ne semble pas fonctionner sur les anciennes versions de maven), il suffit de définir une propriété:

    <profile>
        <id>dev</id>
        <properties>
            <profile-id>dev</profile-id>
        </properties>
    </profile>

Utilisez ensuite ${profile-id}.

Remarque: assurez-vous simplement que l'un est toujours actif par défaut

15
Mike R

Selon PLXUTILS-37 , il devrait être possible d'accéder aux propriétés dans une liste ou une carte en utilisant "Propriétés de réflexion" (voir MavenPropertiesGuide pour en savoir plus).

Alors essayez simplement ${project.profiles[0].id}, ${project.profiles[1].id}, etc.

Si cela ne fonctionne pas (je n'ai pas vérifié si cela fonctionne), j'utiliserais l'activation de profil basée sur une propriété système comme décrit dans Introduction à la création de profils et j'utiliserais cette propriété dans le filtre. Quelque chose comme ca:

<profile>  
  <id>profile-profileId1</id>  
  <activation>
    <property>
      <name>profile</name>
      <value>profileId1</value>
    </property>
  </activation>
  <build>  
    <filters>  
      <filter>src/main/filters/${profile}.properties</filter>  
    </filters>  
    // rest of the profile  
</profile>

Pour activer ce profil, vous devez taper ceci sur la ligne de commande:

mvn groupId:artifactId:goal -Dprofile=profileId1 
3
Pascal Thivent