Was muss ich in einem Eclipse-Projekt konfigurieren, um den Fehler zu beheben "Der Import-XXX kann nicht aufgelöst werden"

8

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:

%Vor%

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):

  1. target/generated/src/main/java existiert nicht, aber das Kontrollkästchen "Create new folder" konnte ich erstellen.
  2. Jedoch auf pom.xml & gt; Ausführen als & gt; Maven clean , es wird gelöscht (muss also nach jedem clean neu erstellt werden ???)
  3. Wenn Sie nach dem Bereinigen nicht neu erstellen, tun Sie pom.xml & gt; Ausführen als & gt; Maven install , erzeugt die generierte Quelle in einer völlig anderen Struktur: generated-sources/cxf/com/yourcompany/sample/ns . Warum ???
  4. Das Modul 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).
  5. Aber ... sobald es in den Ordner non-target verschoben wird, zB com.yourcompany.sample.ns unter src / main / java, "import com .yourcompany.sample.ns.RegistryType; " kann nicht erneut aufgelöst werden!

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?

    
Eternal Learner 02.08.2013, 22:31
quelle

4 Antworten

2
  

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 .

%Vor%

ps: Um Connectors zu installieren / zu finden, gehen Sie zu Preferences -> Maven -> Discover

    
Anthony Accioly 16.08.2013, 15:16
quelle
7

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.

    
Patrick 09.08.2013 19:19
quelle
0

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%     
Tim Bender 02.08.2013 22:39
quelle
0

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 ...

    
Mike D 15.08.2013 22:50
quelle

Tags und Links