Pregunta

Tenemos una compilación de módulos múltiples con módulos que utilizan diferentes tecnologías, como Java y Flex. ¿De alguna manera es posible activar diferentes perfiles según el módulo que se compila actualmente?

Lo probé con una activación como

<profile>
  <id>flex</id>
  <activation>
    <file>
      <exists>${basedir}/src/main/flex</exists>
    </file>
  </activation>
  ...
</profile

Pero no funcionó, aunque el uso de $ {basedir} es documentado en el Documentación de Maven (esto es un error en Maven). ¿Existe una posibilidad diferente de tener diferentes activaciones basadas en el módulo actual? ¿O Maven solo permite activar un perfil para todos los módulos o ninguno?

¿Fue útil?

Solución

Para aquellos como yo que leen esta pregunta en busca de respuestas, este caso de uso ahora funciona en Maven 3.

Hubo un error que afectaba esta característica en las primeras versiones de 3 (consulte http: // jira .codehaus.org / browse / MNG-2363 ) pero me funciona correctamente usando Maven 3.0.4.

Otros consejos

Después de un poco más de investigación, finalmente llegué a la conclusión de que esto no es posible por dos razones en la versión actual de Maven (2.1.0):

  • Los perfiles de Maven no se heredan, por lo que no puede definir un perfil en un POM principal y activarlo en un POM secundario.
  • No he encontrado la posibilidad de activar un perfil desde un POM. La activación no funciona con $ {basedir} y la respuesta de activación de propiedad solo a la configuración del sistema, que se especifica globalmente a través de la opción -D.

En 2.2.1, los perfiles se heredan pero el problema $ {basedir} sigue ahí. Estoy en el mismo barco: necesito activar un perfil basado en la existencia de un archivo en un proyecto determinado. Las compilaciones de mi hijo se ejecutan individualmente bien (perfil heredado activado por la existencia del archivo local), pero si ejecuto la compilación desde el padre superior, fallan porque no se encuentra el archivo.

Con respecto a la activación basada en archivos, puede intentar eliminar $ {basedir}. Lo usamos así:

<activation>
   <file>
      <missing>target/jboss/conf/jboss-service.xml</missing>
   </file>
</activation>

No sé si esto ayuda, pero resolví un problema similar con el siguiente enfoque:

  1. Creé y describí el perfil en el POM principal, que tiene activeByDefault = false . La sección PluginManagement-Section contiene las configuraciones para diferentes complementos.
  2. Los niños pueden reutilizar este perfil y establecer activeByDefault = true Esto activa el perfil, pero ninguno de los complementos está activado.
  3. Pero afortunadamente, las configuraciones de complementos descritas están disponibles. Puede reutilizarlos en niños definiéndolos en la Sección de complementos. Simplemente proporcione el grupo y el artifactID, y establezca herencia> verdadero para cada complemento que desee reutilizar en los elementos secundarios.

Espero que eso ayude. Perdón por no incluir ningún fragmento de código, pero espero que aun así las explicaciones sean comprensibles.

Puede establecer una propiedad en cada módulo que desea usar el perfil, y luego usar " propiedad " activación en sus perfiles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top