J'ai un projet multimodule Maven2 qui construit une application web. L'application est connectée à un serveur principal et à une base de données. Il y a plusieurs instances de serveur déployé dans notre environnement, et il y a aussi backend multiples et instances DB pour le développement, UAT, production, etc. Donc, pratiquement, chaque configuration de l'application a besoin de ces 3 coordonnées:Pourquoi ne puis-je pas activer un profil Maven2 à partir d'un autre profil?
- serveur frontal
- back-end serveur
- DB
Je travaille à unifier et à l'automatisation de la configuration de l'application. Il est facile et évident de représenter ces différentes configurations en tant que profils dans Maven. Ensuite, je peux créer une configuration spécifique en activant un profil de chaque groupe, par ex.
mvn -Pserver.Server1,backend.prod,db.uat clean install
C'est un peu fastidieux de type et sujette à erreur - si un serveur spécifique est mal configuré pour se connecter au mauvais DB, le prix peut être élevé. Une façon évidente de résoudre ce problème serait de placer toutes les combinaisons de profils utiles dans des fichiers de script.
Mais je pensais que je pourrais être plus intelligent que cela en activant le back-end nécessaire et le profil DB directement à partir du profil du serveur. Les profils de serveur sont dans le pom principal, par ex.
<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>
Et les profils de base et de base de données se trouvent dans le sous-module Config, par ex.
<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>
Donc, en théorie, puisque le profil server.myserver
définit la propriété db
à dev02
, cela devrait déclencher l'activation du profil db.dev02
chez l'enfant pom. Cependant, cela n'arrive pas. (Ni si les deux profils sont dans le même pom, btw). Si je mets la propriété de la ligne de commande avec
mvn -Ddb=dev02 help:active-profiles
alors le profil est activé, donc apparemment je n'ai rien mal orthographié.
Ai-je oublié quelque chose? Y a-t-il un autre moyen de faire ce travail?
Je vois qu'il existe une question similaire: Can I make one maven profile activate another?
Cependant, à mon humble avis ce n'est pas un double - je vois qui ne fonctionne pas mon approche et je voudrais comprendre pourquoi. (J'ai lu la référence, mais j'ai peut-être oublié quelque chose d'évident).
@Brett, merci, cela a éclairci les choses. Une dernière chose cependant: vous avez écrit "La solution que vous avez utilisée, d'avoir des propriétés identiques pour activer les choses que vous voulez faire ensemble, est la meilleure solution.". Dans quel sens? Esthétiquement peut-être, mais ça ne marche toujours pas ... –
Je voulais dire celui "de la ligne de commande". Donc, si vous avez besoin de 'profile1' pour impliquer que' profile2' est activé, assurez-vous qu'ils sont activés avec 'propertyX', puis utilisez' mvn -DpropertyX' au lieu de 'mvn -Pprofile1'. Ce n'est pas aussi flexible que ce que vous cherchiez. –