2010-01-06 21 views
34

En pom.xml he puesto o perfiles de la siguiente manera:Maven - ¿Puedo hacer referencia a la identificación de perfil en la definición de perfil?

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

¿Hay alguna manera de que pudiera extraer esta pieza de todos los perfiles, por lo que no hay necesidad de repetir esta operación para cada perfil (y posiblemente escribir mal eso)?

Respuesta

2

De acuerdo con PLXUTILS-37, debería ser posible acceder a las propiedades de una Lista o Mapa usando "Propiedades de Reflejo" (vea MavenPropertiesGuide para obtener más información al respecto).

Así que sólo tratar ${project.profiles[0].id}, ${project.profiles[1].id}, etc.

Si esto no funciona (no hemos comprobado si lo hace), que haría uso de la activación de perfil basado en una propiedad del sistema como se describe en Introduction to build profiles y usa esa propiedad en el filtro. Algo así:

<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> 

para activar este perfil, debería escribir esto en la línea de comandos:

mvn groupId:artifactId:goal -Dprofile=profileId1 
29

con Maven 2.2.1 y más tarde, pude obtener el ID de la primera perfil activo usando:

${project.activeProfiles[0].id} 

Por supuesto, esto falla si no hay al menos un perfil activo.

Utilizando el

${project.profiles[0].id} 

según lo sugerido por Pascal hicieron no trabajo para mí.

Consejo: Si bien la investigación de este, realmente empecé a amar mvn help:evaluate

+2

Uso de '$ {project.activeProfiles [0] .id}' funcionó a la perfección para mí. Puede asegurarse de que al menos un perfil estará activo con ' true' en el bloque de activación de un perfil. – SimonB

+1

Lo mismo aquí, $ {project.activeProfiles [0] .id} funcionó, maven 3.2 – chrismarx

+0

Por alguna razón, no extraerá una propiedad parent pom; entonces, si, por ejemplo, activa 2 perfiles, uno de uno de los padres, solo se recuperará la propiedad del proyecto actual. – ftkg

11

Como alternativa a ${project.activeProfiles[0].id} (lo que no parece funcionar en versiones anteriores de experto), acaba de definir una propiedad:

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

Luego use ${profile-id}.

Nota: sólo asegúrese de que uno siempre está activo por defecto

+3

¿Por qué veo una serpiente mordiéndose la cola? –

Cuestiones relacionadas