Ich habe ein multimodul Maven2-Projekt, das eine Webanwendung erstellt. Die Anwendung ist mit einem Backend-Server und einer Datenbank verbunden. Es gibt mehrere Serverinstanzen in unserer Umgebung bereitgestellt, und es gibt auch mehrere Backend und DB-Instanzen für Entwicklung, UAT, Produktion, etc. So praktisch jede Anwendungskonfiguration benötigt diese drei Koordinaten:Warum kann ich ein Maven2-Profil nicht von einem anderen Profil aus aktivieren?
- Front-End-Server
- back-End-Server
- DB
ich auf vereinigende arbeite und die Automatisierung der Anwendungskonfiguration. Es ist einfach und offensichtlich, diese verschiedenen Konfigurationen als Profile in Maven darzustellen. Dann kann ich eine spezifische Konfiguration erstellen, indem ich ein Profil von jeder Gruppe, z.
mvn -Pserver.Server1,backend.prod,db.uat clean install
Dies ist ein bisschen langweilig zu schreiben und zu fehleranfällig - wenn ein bestimmte Server falsch konfiguriert ist zur falschen DB zu verbinden, kann der Preis hoch sein. Eine naheliegende Möglichkeit, dies zu beheben, wäre es, alle nützlichen Profilkombinationen in Skriptdateien einzufügen.
Aber ich dachte, dass ich cleverer sein könnte, indem ich das notwendige Back-End- und DB-Profil direkt vom Serverprofil aktiviere. Die Serverprofile sind im Hauptpom, z.B.
<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>
Und die Back-End und DB-Profile sind in der Pom des Config-Submoduls, z.
<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>
Also in der Theorie, da die server.myserver
Profil der db
Eigenschaft auf dev02
setzt, sollte dies die Aktivierung des db.dev02
Profil in dem Kind pom auslösen. Dies geschieht jedoch nicht. (Auch wenn die beiden Profile im selben Pom sind, btw). Wenn ich die Eigenschaft von der Kommandozeile mit
mvn -Ddb=dev02 help:active-profiles
gesetzt dann wird das Profil jedoch aktiviert, so scheinbar habe ich nichts falsch geschrieben.
Habe ich etwas übersehen? Gibt es einen anderen Weg, um das zu funktionieren?
Ich sehe, dass es eine ähnliche Frage besteht: Can I make one maven profile activate another?
jedoch IMHO dies kein Duplikat ist - ich sehe, dass mein Ansatz nicht funktioniert und ich würde verstehen, warum mag. (Ich habe die Referenz gelesen, aber vielleicht habe ich etwas offensichtlich übersehen).
@Brett, danke, das hat alles gelüftet. Eine letzte Sache jedoch: Sie haben geschrieben: "Die Lösung, die Sie benutzt haben, hat identische Eigenschaften, um die Dinge zu aktivieren, die Sie zusammen machen wollen, ist die beste Lösung." In welchem Sinne? Ästhetisch vielleicht, aber es funktioniert immer noch nicht ... –
Ich meinte die eine "von der Kommandozeile". Wenn Sie also "profile1" benötigen, um zu signalisieren, dass "profile2" aktiviert ist, stellen Sie sicher, dass beide mit 'propertyX' aktiviert sind, und verwenden Sie' mvn -DpropertyX' anstelle von 'mvn -Profile1'. Es ist nicht ganz so flexibel wie das, wonach Sie gesucht haben. –