Verpackung WSDL-Kunden in Gläser mit Maven und cxf-codegen-plugin
Ich habe ein maven Projekt, dass Sie verbrauchen eine Reihe von webservices. Wird die Applikation so verpackt, wie ein KRIEG. So weit die Kunden-code generiert wurde, mit cxf-codegen-plugin
im generate-sources
phase. Standardmäßig generiert die Quellen befinden sich in target/generated-sources/cxf
, und nach compile
sind Sie zusammengestellt und vermischt sich mit der Anwendung von Klassen in target/classes
. Sowohl die generierte und Anwendung Klassen teilen sich die first-level-Pakete.
Möchte ich jedem der Kunden zu sein, verpackt in eine eigene JAR-innen WEB-INF/lib
in der war-Datei. Ich fand heraus, über -clientjar
, aber es erzeugt nur die .jar
Dateien und platziert Sie in target/generated-sources/cxf
, und die Gläser am Ende auch in target/classes
zusammen mit den kompilierten Klassen, die sinnlos ist.
Ich nehme an, die compile
plugin ist irgendwann kompilieren des generierten Quellen in target/classes
, und möglicherweise einer weiteren phase ist auch das verschieben der Gläser gibt. Würde es möglich sein, auf Maven zu vermeiden, kompilieren erzeugt Quellen (oder sogar cxf-codegen-plugin
generieren keine Quellen überhaupt, nur die Gläser), und kompilieren Sie die Anwendung Klassen gegen die Gläser generiert CXF?
Ich weiß, es wäre möglich, dies zu erreichen, durch die Definition einer multimodule-Projekt mit einer jar-Verpackung Modul für jeden webservice, aber ich möchte vermeiden diese option. Es kann eine große Anzahl von webservices und es wäre nicht geeignet, um weiterhin eine unabhängige module für jeden. Mit -clientjar
bin ich schon gezwungen, zu definieren, eine <wsdlOption>
für jede WSDL, um die JAR-Dateiname für jede WSDL (es ist nicht möglich, lassen Sie cxf-codegen-plugin
Scannen Sie einfach src/main/resources/wsdl
oder <wsdlRoot>
).
Natürlich die client-JARs erzeugt werden, die außerhalb der Maven und der Installation auf einem lokalen repository und wird definiert als Abhängigkeiten im Projekt, aber ich würde gerne wissen, ob es möglich ist, dies in einem einzigen Maven-build.
Mit Baugruppen würde ich wahrscheinlich, wie legen Sie die JAR-Dateien generiert, die von -clientjar
in WEB-INF/lib
aber es wäre immer noch ein Problem mit den generierten Klassen innerhalb der KRIEG.
Habe ich nicht einen tiefen Einblick in die Maven-build-lifecycle und seine Möglichkeiten, Anregungen oder Hinweise sind sehr willkommen.
- Diese Frage zu Fragen scheint für etwas ähnliches.
- Ich habe am Ende die Schaffung eines aggregator mit den wichtigsten Projekt-und anderen aggregator und parent project, dass seine Kinder
wsdl2java
zu einer einzigen jar-jederwsdl
im Kinder-Ordner. Nicht genau, was ich wollte, funktioniert aber (beinhaltet das schreiben einer dummy -pom.xml
Datei angeben Artefakt-name und Gruppen-id und hinzufügen, um die<modules>
von den Eltern für jeden neuen WS-client hinzufügen). - Warum nimmst du nicht die Lösung posten als Antwort, sondern als Kommentar?
- Tolle Antwort. Von Ihnen positiv bewertet werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist der Ansatz, den ich nahm. Es ist nicht genau das, was ich wollte, es gibt immer noch viel manuelle Arbeit zu tun, mit jedem WSDL-Datei und die ist weit entfernt von der Lösung, die ich im Sinn hatte (mit Maven erstellt automatisch einzelne JAR-Artefakte für jede wsdl-Datei in das Projekt und Sie als Abhängigkeit).
Speziell für jede WSDL, muss dieser Ansatz :
pom.xml
enthält ein besonderes Artefakt NamenIch landete einen aggregator (multimodule) Maven-Projekt, mit einem Modul für jede WebService-Client,, das wird produzieren ein JAR-artifact mit dem erzeugten WS-client-Klassen (folgende Maven-Konvention von ein Artefakt pro POM).
Für die Bequemlichkeit, das plugin kümmert sich um den WebService-client-Klassen generation definiert ist, nur einmal in der main -
pom.xml
, und dieses POM ist das übergeordnete Element der WS-client-generation POMs. Es ist wichtig zu beachten, dass der Unterschied zwischen aggregator und den parent-POMs. Beide Begriffe zusammen verwendet werden in diesem Ansatz.Gibt es auch ein Modul für die Haupt-webapp. Seine
pom.xml
gibt Abhängigkeiten für jede der WS-client-JAR-Artefakte.Dies ist die Kurzfassung des Projekt-Verzeichnis-Struktur:
Aggregator POM:
Jeder der WS-client-POMs ist extrem einfach, nur ein Artefakt name und geben Sie den Eltern:
Den webapp-POM muss nicht sein, ein Kind des parent-POM, weil es wird nicht mit dem
cxf-codegen-plugin
, und umfasst<dependency>
s für jeden der WS-client-Artefakte: