¿Por qué no puedo activar un perfil de Maven2 desde otro perfil?

Tengo un proyecto multimodular Maven2 que construye una aplicación web. La aplicación está conectada a un servidor backend y una base de datos. Hay varias instancias de servidor implementadas en nuestro entorno, y también hay varias instancias de base de datos y DB para desarrollo, UAT, producción, etc. De modo que, prácticamente, cada configuración de aplicación necesita estas 3 coordenadas:

  • servidor front-end
  • servidor back-end
  • DB

Estoy trabajando para unificar y automatizar la configuración de la aplicación. Es fácil y obvio representar estas diferentes configuraciones como perfiles en Maven. Entonces puedo crear una configuración específica activando un perfil de cada grupo, por ejemplo

mvn -Pserver.Server1,backend.prod,db.uat clean install 

Esto es un poco tedioso de escribir y propenso a errores: si un servidor específico está mal configurado para conectarse al DB incorrecto, 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 inteligente que eso al activar 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, por ejemplo

  server.myserver  D:\Programs\jboss-4.2.1.GA NightlyBuild 192.168.1.100 8080 ... dev02   

Y los perfiles backend y DB están en el pomo del submódulo Config, por ej.

  db.dev02   db dev02    jdbc:oracle:thin:@192.168.0.101:1521:dbdev02   

En teoría, dado que el perfil server.myserver establece la propiedad db en dev02 , esto debería desencadenar la activación del perfil db.dev02 en el pom hijo. Sin embargo, esto no sucede. (Ni si los dos perfiles están en el mismo pom, por cierto). Si configuro la propiedad desde la línea de comando con

 mvn -Ddb=dev02 help:active-profiles 

entonces el perfil está activado, así que aparentemente 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: ¿Puedo hacer que un perfil de experto active otro?
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).

La característica simplemente no existe. El activador de propiedad utiliza las propiedades entrantes, no nada establecido por los perfiles (de lo contrario, no sabría en qué orden activarlos sin una lógica más compleja).

La solución que utilizó, de tener propiedades idénticas para activar las cosas que desea hacer juntas, es la mejor solución. Me doy cuenta de que puede que no siempre sea satisfactorio; en ese caso, todo lo que puede hacer es volverse lo más simple posible para que pueda combinarlos de la manera que desee en la línea de comandos, sin duplicar cosas entre ellos.

El problema que cubre esta función es: https://issues.apache.org/jira/browse/MNG-3309
El problema que cubre la activación de la propiedad es: https://issues.apache.org/jira/browse/MNG-2276

El problema MNG-2276 mencionado por Brett se resolvió en maven 3.x, por lo que ahora puedes definir propiedades en settings.xml para activar perfiles en tu pom. Aquí hay un ejemplo:

En settings.xml:

  localDist  localDist   true   

En tu pom (o mejor aún, en tu padre pom):

  doReleaseTasks  doReleaseTasks    ... mvn -DlocalDist will activate these plugins    

Buena idea para usar el complemento de enforcer para forzar mvn 3.0 o superior:

    maven-enforcer-plugin   enforce-maven  enforce     [3.0,)  *** Maven 3.x required to allow cascading profiles to be activated in settings.xml (MNG-2276)