Tengo un proyecto multimodulo Maven2 que crea una aplicación web. La aplicación está conectada a un servidor backend y una base de datos. Hay varias instancias del servidor desplegadas en nuestro entorno, y también hay varias instancias de backend y DB para el desarrollo, UAT, producción, etc Por lo tanto, prácticamente, cada configuración de la aplicación necesita estas coordenadas: 3¿Por qué no puedo activar un perfil de Maven2 desde otro perfil?
- servidor front-end
- back-end de servidor
- DB
estoy trabajando en la unificación y la automatización de la configuración de la aplicación. Es fácil y obvio representar estas diferentes configuraciones como perfiles en Maven. Luego, puedo crear una configuración específica activando un perfil de cada grupo, p.
mvn -Pserver.Server1,backend.prod,db.uat clean install
Esto es un poco tedioso para escribir y propenso a errores - si un servidor específico está mal configurado para conectarse a la base de datos equivocada, el precio puede ser alto. Una forma obvia de solucionar esto sería poner todas las combinaciones de perfiles útiles en archivos de script.
Pero pensé que podría ser más astuto que eso activando el back-end y el perfil de base de datos necesarios directamente desde el perfil del servidor. Los perfiles del servidor están en el pom principal, p.
<profile>
<id>server.myserver</id>
<properties>
<jboss.home>D:\Programs\jboss-4.2.1.GA</jboss.home>
<server.name>NightlyBuild</server.name>
<hosttobind>192.168.1.100</hosttobind>
<servlet.port>8080</servlet.port>
...
<db>dev02</db>
</properties>
</profile>
y los perfiles de back-end y DB están en el pom del submódulo de configuración, por ejemplo,
<profile>
<id>db.dev02</id>
<activation>
<property>
<name>db</name>
<value>dev02</value>
</property>
</activation>
<properties>
<jdbc.address>jdbc:oracle:thin:@192.168.0.101:1521:dbdev02</jdbc.address>
</properties>
</profile>
tanto, en teoría, ya que el perfil server.myserver
establece la propiedad db
a dev02
, esto debe dar lugar a la activación del perfil db.dev02
en el pom niño. Sin embargo, esto no sucede. (Ni si los dos perfiles están en el mismo pom, por cierto). Si establece la propiedad de la línea de comandos con
mvn -Ddb=dev02 help:active-profiles
a continuación, el perfil se activa sin embargo, lo que al parecer no he escrito mal nada.
¿He pasado por alto algo? ¿Hay alguna otra manera de hacer que esto funcione?
veo que existe una pregunta similar: Can I make one maven profile activate another?
Sin embargo, en mi humilde opinión esto no es un duplicado - Veo que mi enfoque no funciona y me gustaría entender por qué. (He leído la referencia, pero podría haber pasado por alto algo obvio).
@Brett, gracias, esto lo solucionó todo. Una última cosa, sin embargo: escribiste "La solución que utilizaste, de tener propiedades idénticas para activar las cosas que quieres hacer juntas, es la mejor solución". ¿En qué sentido? Estéticamente, tal vez, pero todavía no funciona ... –
Me refiero a la "desde la línea de comandos". Entonces, si necesita 'profile1' para implicar que' profile2' está activado, asegúrese de que ambos estén activados con 'propertyX', luego use' mvn -DpropertyX' en lugar de 'mvn -Pprofile1'. No es tan flexible como lo que estabas buscando. –