Maven: Anpassen web.xml web-app-Projekt
Ich habe eine web-Anwendung Maven-Projekt, und ich möchte zum anpassen der web.xml Datei abhängig von dem Profil ausgeführt wird. Ich bin mit dem Maven-War-plugin, was mir erlaubt, zu definieren, ein "Ressourcen" - Verzeichnis, wo die Dateien können gefiltert werden. Allerdings-Filterung allein ist nicht ausreichend für mich.
Im detail, ich will gehören (oder ausschließen) den ganzen Abschnitt über die Sicherheit, je nach dem Profil habe ich einen Betrieb. Dies ist der Artikel:
....
....
<security-constraint>
<web-resource-collection>
<web-resource-name>protected</web-resource-name>
<url-pattern>/pages/*.xhtml</url-pattern>
<url-pattern>/pages/*.jsp</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>${web.modules.auth.type}</auth-method>
<realm-name>MyRealm</realm-name>
</login-config>
<security-constraint>
....
....
Ist dies nicht leicht gemacht, gibt es eine Möglichkeit zu haben zwei web.xml Dateien und wählen Sie das passende je nach Profil?
InformationsquelleAutor der Frage Markos Fragkakis | 2010-07-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, innerhalb jedes Profil können Sie eine Konfiguration des
maven-war-plugin
und konfigurieren Sie die einzelnen Punkt, an einem anderenweb.xml
.Als alternative zum angeben der
maven-war-plugin
Konfiguration in jedem Profil Sie können eine Standard-Konfiguration in der main-Sektion der POM und dann einfach überschreiben, es für bestimmte profile.Oder noch einfacher, in der Haupt -
<build><plugins>
Ihre POM, verwenden Sie eine Eigenschaft zu finden, diewebXml
Attribut und dann einfach ändern Sie den Wert in verschiedenen ProfilenInformationsquelleAutor der Antwort matt b
Gibt es eine Dritte, Kompromiss-option, die ich umgesetzt habe in meinem Projekt. Es hält sich noch alles in einem web.xml während noch Sie beide und die pom.xml lesbar. In meinem Fall hatte ich das Bedürfnis, manchmal haben die Sicherheit, und manchmal haben keine Sicherheit, abhängig von der Umgebung.
Also, was ich Tat, war:
In der pom.xml definieren Sie zwei profile (oder wie viele Sie benötigen). Innerhalb der profile, die enthalten zwei Eigenschaften. Wenn Sie wollen Sicherheit, Sie lassen Sie Sie leer, so wie hier:
Wenn Sie ausschließen wollen, von der Sicherheit, Sie definieren Sie wie folgt:
Dann haben Sie eine einzige web.xml Datei mit dem folgenden:
Den pom.xml maven-war-plugin konfiguriert werden, um den Filter verwenden. Mine sieht wie folgt aus:
Also, im Grunde, wenn Sie wählen Sie das Profil zu schließen Sicherheit, erhalten Sie zwei zusätzliche CRLF in Ihrem web.xml. Wenn Sie wählen Sie das Profil, damit Sie NICHT die Sicherheit, die XML ist alles noch in der web.xml aber es ist auskommentiert, so wird es ignoriert. Ich mag diese, weil Sie nicht haben, um sorgen über das halten von mehreren Dateien im sync, aber die XML-Daten immer noch lesbar (und es ist in der web.xml die Datei wo die Leute würden natürlich Aussehen für Sie).
InformationsquelleAutor der Antwort Chris Clark
Kommentar zu Chris Clark Antwort. Sie können reverse - so in der Entwicklung, die Sie nicht wollen, um alle Einschränkungen (Sicherheit oder jndi, andere)
So, in der Entwicklung Sie haben auskommentierten Abschnitt. Aber in der Produktion wird es übersetzt (mit maven-profile):
und kommentierte Abschnitt werden sichtbar.
InformationsquelleAutor der Antwort Andrzej Jozwik
"matt b" hat schon gepostet, die Antwort ist, dass die meisten maven Weg, es zu tun. Es ist der Weg, ich würde empfehlen, tun es 99% der Zeit.
Jedoch, gelegentlich, Ihre Konfigurations-Datei ziemlich kompliziert ist, und es macht nicht viel Sinn zum duplizieren der gesamten Datei, die für jede Umgebung, wenn nur ein XML-stanza unterscheidet. In diesen Fällen können Sie Missbrauch Eigentum filtern, um Ihr Ziel zu erreichen.
Warnung, eine sehr duct-tape-Lösung y folgt, und nicht für das schwache des Herzens:
In Ihrem pom.xml:
Aufmerksamkeit StackOverflow-Editoren!!!!
in Ihrem web.xml
Weil nicht vorhandene Eigenschaften zu bewerten, um eine leere Zeichenfolge, Ihre Konfigurationen, die nicht über diese Eigenschaft legen Sie (oder der Eigenschaft eine leere xml-Tags) werden anhand einer leeren Zeile hier.
Es ist hässlich, und die xml ist schwer zu ändern in dieser form. Allerdings, wenn Ihr web.xml ist Komplex, und Sie stellen eine größere Gefahr von 4-5 Kopien der web.xml die Synchronisation kann dies ein Ansatz sein, die die Arbeit für Sie.
InformationsquelleAutor der Antwort Brian M. Carr
Eine neue Konfiguration Hinzugefügt wurde, wird das maven-war-plugin in der version 2.1-alpha-2.
Sein name ist
filteringDeploymentDescriptors
und es tut genau, was Sie wollen.Dies funktioniert:
Und dies funktioniert auch:
Mehr Informationen finden Sie in der offizielle Dokumentation von filteringDeploymentDescriptors.
InformationsquelleAutor der Antwort Kristof Neirynck
Verbesserung https://stackoverflow.com/a/3298876/2379360
Anstatt der Angabe einer benutzerdefinierten Eigenschaft, verwenden Sie die Standard-property maven.Krieg.webxml in Ihren unterschiedlichen Profilen.
InformationsquelleAutor der Antwort tuckerpm
Anderen als dem vorgeschlagenen Ansatz von matt b es ist nützlich, zu denken, es die andere Weise herum, vor allem, weil in vielen Fällen werden Sie haben, zu bündeln application-server-spezifische Konfigurationen, die nicht unter die maven-plugins (afaik). Diese kann sehr wohl Unterschiede zwischen den Profilen.
Konkret, Sie können mit einem übergeordneten Projekt, das alle gemeinsamen Dateien zwischen web-Projekte mit unterschiedlichen Profilen. Dann Kind-Projekte können verschiedene web.xml Dateien und der rest der id gemacht mit Profilen und der
maven-war-plugin
. Zum Beispiel, habe ich dieses layout zu erreichen unbeaufsichtigte baut (andere als die Angabe eines Profils) für verschiedene Ziel-Umgebungen (development, uat etc.)Pom von WebPc hat die folgenden pom
- Und das ist die pom für WebPc-DEV
InformationsquelleAutor der Antwort dkateros