¿Activar diferentes perfiles de Maven dependiendo del módulo actual?
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?
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:
- Creé y describí el perfil en el POM principal, que tiene
activeByDefault = false
. La sección PluginManagement-Section contiene las configuraciones para diferentes complementos. - Los niños pueden reutilizar este perfil y establecer
activeByDefault = true
Esto activa el perfil, pero ninguno de los complementos está activado. - 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.