Ich folge diesem Vertrag zuerst mit CXF Tutorial.
Alles lief gut, einschließlich der Generierung von Quellen aus der WSDL, mit build-helper-maven-plugin
, aber als die Zeit kam, "den Service zu implementieren", dh die generierte RegistryResourceImpl.java
in den normalen Quellordner src/main/java
zu verschieben, fing Eclipse an sich zu beschweren einige Symbole (wie die Schnittstelle RegistryResource
) werden nicht erkannt.
Da der normale src/main/java
Ordner einen anderen Paketnamen hat, habe ich einfach in RegistryResourceImpl.java
den Import für das Paket hinzugefügt, wo RegistryResource.java
gehört:
Aber Eclipse scheint in seiner aktuellen Projektkonfiguration für com.yourcompany.sample.ns
blind zu sein und weiß nicht, wo es zu finden ist.
Ich habe versucht, eine Option im Build-Pfad zu finden, die auf die generierten Quellen verweist, aber nichts von dem, was ich versucht habe, hat geholfen.
Ich habe das Gefühl, mir fehlt etwas sehr Triviales, aber was ist es?
Sollte nicht auch m2e
(Maven-Plugin für Eclipse) diese Art von Implementierungsdateien automatisch übernehmen?
Aktualisieren (nachdem Sie @ Patrick's vorgeschlagene Lösung versucht haben):
target/generated/src/main/java
existiert nicht, aber das Kontrollkästchen "Create new folder" konnte ich erstellen. Maven clean
, es wird gelöscht (muss also nach jedem clean neu erstellt werden ???) Maven install
, erzeugt die generierte Quelle in einer völlig anderen Struktur: generated-sources/cxf/com/yourcompany/sample/ns
. Warum ??? RegistryResourceImpl.java
wird jedoch immer noch automatisch unter target/generated sources
erstellt. An dieser Stelle sehe ich keine Beschwerden mehr über "ungelöstes Paket / Import / Symbole" (komisch). Wenn ich andererseits versuche, als "Quellordner" den tatsächlich generierten Pfad generated-sources/cxf/com/yourcompany/sample/ns
hinzuzufügen (anstelle der irrelevanten / nicht vorhandenen target/generated/src/main/java
wird der generierte Baum unter target
verschoben (gelöscht) ) zu unter /src/main/java
Ich verstehe dieses Verhalten von Eclipse nicht.
Zuletzt, auch wenn ich Maven
& gt; Update Project
schlug hier vor und löschte damit das "Maven 2 Project Error Icon", das RegistryResourceImpl.java
Modul ist immer noch nicht aufgelöst Symbole, obwohl das gesamte Projekt vollkommen in Ordnung ist!
Was könnte das erklären?
Ist es möglich, dass das build-helper-maven-plugin
unvollständig oder sogar defekt ist?
Gibt es eine Möglichkeit, CXF + build-helper-maven-plugin
harmonisch mit Eclipse zu arbeiten, damit ich die störenden roten Unterstreichungen von "unaufgelösten Symbolen" nicht sehe, selbst wenn das Projekt erfolgreich erstellt wurde?
Wenn Sie nach dem Bereinigen nicht neu erstellen, tun Sie pom.xml & gt; Ausführen als & gt; Maven install, erstellt die generierte Quelle unter einem völlig anderen Baum: generated-sources / cxf / com / yourcompany / sample / ns. Warum ???
Sie müssen das cxf-codegen-plugin um den generierten Code in den gewünschten Ordner auszugeben.
%Vor% Installieren Sie dann entweder einen Connector für cxf-codegen-plugin (falls vorhanden) oder verwenden Sie maven build-helper-maven-plugin mit seinem Connector. Stellen Sie sicher, dass sources
auf dieselbe Stelle verweist wie sourceRoot
.
ps: Um Connectors zu installieren / zu finden, gehen Sie zu Preferences -> Maven -> Discover
Sie müssen einen Quellordner in Eclipse für Ihre generierten Quellen hinzufügen. Das Tutorial erwähnt dies in seinem Kommentar "Hinweis: M2Eclipse scheint diesen Quellordner nicht zu lesen, daher müssen Sie ihn manuell in Eclipse hinzufügen." Wenn Sie die Anweisungen im Lernprogramm befolgt haben, muss der Speicherort, den Sie hinzufügen müssen, relativ zum Projektverzeichnis sein.
%Vor%Um den Ordner hinzuzufügen, öffnen Sie Ihre Projekteigenschaften und wählen Sie "Java Build Path" aus dem Menü auf der linken Seite. Klicken Sie auf der Registerkarte "Quelle" auf die Schaltfläche "Ordner hinzufügen ..." und wählen Sie "Ziel / Erzeugt / Quell / Haupt / Java" als Quellordner.
Bitte nicht, dass Maven die generierten Ordner entfernt, wenn ein mvn clean install
ausgeführt wird. Möglicherweise möchten Sie Eclipse so konfigurieren, dass Ressourcen bei der Ausführung dieses Befehls aktualisiert werden, um Inkonsistenzen zu vermeiden. Die Eclipse-Laufkonfiguration enthält eine Registerkarte "Aktualisieren", mit der Sie "Ressourcen nach Abschluss aktualisieren" aktivieren können.
Eine andere Option, die Sie in Betracht ziehen könnten, ist die Verwendung von Maven für Ihre wsimport braucht. Ich würde wsimport direkt nennen und die generierten Artefakte unter Ihre% co_de stellen % Ordner und damit fertig sein. Es sei denn, Sie müssen die Artefakte bei jedem Build wirklich neu generieren, ich denke, das Maven-Plugin ist mehr problematisch als es wert ist.
Das Problem besteht darin, dass der Ordner generierte Quellen viele andere Klassendefinitionen enthält, die auch von der Klasse RegistryResourceImpl
benötigt werden. Sie müssen den generierten Quellordner als Quellcode im maven pom hinzufügen. Eine ähnliche Frage hat eine anständige Antwort .
Aus dieser Antwort:
%Vor%Möchten Sie diese Quellen wirklich mit jedem Build generieren? Die generate-sources aus dem cxf-codegen-plugin generieren nur Stub-Dateien, die Sie dann modifizieren müssen (den "Service implementieren" -Teil) die Sie erwähnt haben), um die Datei vollständig zu vervollständigen. In diesem Fall möchten Sie nicht, dass generate-sources Ihre Datei bei jedem Build trotzdem überschreibt, nein? Das sollte etwas sein, das du explizit aufrufen musst (ein Maven Profil wäre ein guter Kandidat oder vielleicht etwas, das eine Bearbeitung der wsdl-Datei auslöst. Sie könnten dann ein Ziel oder ein beliebiges (nicht-Quell-) Verzeichnis erzeugen, wenn Sie explizit dazu aufgefordert werden, und diese Dateien in den Standard-src / main / java-Teil ziehen / zusammenführen. Wenn die Dateien vollständig erstellt würden, wäre das eine andere Geschichte, aber da von Ihnen erwartet wird, zu erstellen, dann zu bearbeiten dann ist es kein One-Shot-Deal ...