webentwicklung-frage-antwort-db.com.de

Ein Zyklus wurde im Erstellungspfad von Projekt xxx - Erstellungspfadproblem erkannt

Ich bin gerade dabei, meine Projekte mit Maven und Eclipse in OSGI-Bundles zu konvertieren. Maven baut das Zeug einfach gut, nur ich bekomme den obigen Fehler jetzt in Eclipse. Wie kann ich herausfinden, welches Projekt dies verursacht? Gibt es eine besondere Ansicht oder etwas? Wie kann das passieren, ich würde erwarten, dass Maven auch zyklische Abhängigkeiten erkennen kann?

Update

Ok, ich habe etwas gefunden hier Und hier

Könnte dies durch das Felix Maven-Bundle-Plugin verursacht werden, das für jeden Export auch einen Import ausführt?

40
Mauli

Markieren Sie kreisförmige Abhängigkeiten in Eclipse als "Warnung", um den Fehler "EIN ZYKLUS WURDE IM BAUPFAD ERKANNT" zu vermeiden.

In Eclipse gehen Sie zu:

Windows -> Einstellungen -> Java -> Compiler -> Gebäude -> Zirkulare Abhängigkeiten

77
user2582855

Wenn sich mehrere Projekte im Arbeitsbereich befinden, müssen wir die Referenzen zwischen den Projekten festlegen, nicht zwischen den Projekten. Wenn P1 auf P2 verweist, verweist P2 auf P3 und P3 auf P1 zurück. Das wird einen Zyklus verursachen. 

Die Lösung besteht darin, ein Diagramm der Referenz zwischen Projekten im Arbeitsbereich zu zeichnen. Überprüfen Sie den Java-Erstellungspfad jedes Projekts, um die Registerkarte des Projektfensters anzuzeigen. Nehmen Sie das Projekt heraus, das sich auf das Hauptprojekt bezieht, z. P3 bezieht sich in diesem Beispiel oben auf P1.

Um eine ausführliche Operation auszuwählen, wählen Sie das P3-Projekt in RAD OR Eclipse aus. Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie die Eigenschaftsoption. Es wird ein neues Fenster für die Eigenschaften von P3 angezeigt. Klicken Sie auf den Abschnitt "Java Build Path". Wählen Sie die Registerkarte "Projects". Sie können sehen, dass P3 im Feld auf P1 verwiesen hat. Wählen Sie die Referenz P1 aus und klicken Sie auf die Schaltfläche "Entfernen" auf der rechten Seite des Fensters. Klicken Sie dann auf OK. Die IDE startet den Pfad automatisch zurückzusetzen.

Erledigt.

Finden Sie alle falsch referenzierten Verweise in jedem Projekt, bis Sie die richtigen Verweise auf jedes der Projekte in Ihrem Diagramm haben. Viel Glück!

10
Jack

Ich hatte dies wegen eines Projekts, das auf ein anderes verwies.

  1. Referenz von Projekt A zu Projekt B entfernen
  2. Versuchen Sie, Sachen auszuführen, es wird kaputt gehen
  3. Referenz erneut hinzufügen
  4. Reinigen/Reinigen und Bauen
  5. Zurück im Geschäft
7

Vereinfacht ausgedrückt, ist ein Zyklus, wenn das Bündel A von Bündel B abhängt, das von Bündel A abhängt. Wenn es sich um Quellcode handelt, gibt es keine Möglichkeit, die Bündel in einem Durchgang separat aufzubauen.

Da das Problem nur in Eclipse auftritt, kann es sich um eine binäre zirkulare Abhängigkeit handeln, im Gegensatz zu einer Quellcode-Abhängigkeit.

In den letzten Versionen von Eclipse gibt es Unterstützung für binäre Zyklen: Eclipsesource Blog

Wenn der Zyklus in Ihrem Code enthalten ist, empfehle ich, den Code zu überarbeiten, indem Sie einen Teil des Codes in ein drittes Bundle aufspalten, um die zirkuläre Abhängigkeit zu beseitigen.

Wenn Sie OSGi-Fragmente verwenden (ein übliches Muster für Komponententests), ist es sehr einfach, Zyklen einzuführen.

Der Manifest-Editor von Eclipse verfügt auf der Registerkarte "Abhängigkeiten" über Funktionen zum Suchen nach Zyklen (Sie müssen auf "Abhängigkeitsanalyse" klicken), aber ich habe noch nie einen Zyklus gezeigt, selbst wenn Eclipse ein großes rotes X zeigt, das einen enthält Zyklus!

4
SteveD

Problem

Ich habe ein altes Projekt, das zwei verschiedene Implementierungen einer Dictionary-Schnittstelle testet. Eine ist eine unsortierte ArrayList und die andere ist eine HashTable. Die beiden Implementierungen sind zeitlich festgelegt, so dass ein Vergleich durchgeführt werden kann. Sie können auswählen, welche Datenstruktur in den Befehlszeilenargumenten angezeigt wird. Nun .. Ich habe eine andere Datenstruktur, die eine Baumstruktur ist. Ich möchte die Zeit testen, um sie mit der HashTable zu vergleichen. Also .. Im neuen dataStructure-Projekt muss ich die Dictionary-Schnittstelle implementieren. Im Dictionary-Projekt muss ich in der Lage sein, Code hinzuzufügen, der für mein neues dataStructure-Projekt spezifisch ist. Es gibt eine zirkuläre Abhängigkeit. Das heißt, wenn Eclipse herausfindet, welche Projekte von Projekt A abhängig sind, dann findet es Projekt B. Wenn es die Unterabhängigkeiten der abhängigen Projekte herausfinden muss, findet es A, das wiederum von B abhängig ist. Es gibt keinen Baum, sondern ein Diagramm mit einem Zyklus.

Lösung

Wenn Sie den Build-Pfad konfigurieren, müssen Sie nicht die abhängigen Projekte eingeben (Registerkarte "Projekte"), sondern die Registerkarte "Bibliotheken". Klicken Sie auf die Schaltfläche "Klassenordner hinzufügen ..." (vorausgesetzt, dass sich Ihre referenzierten Projekte in Ihrem Arbeitsbereich befinden), und wählen Sie den Klassenordner aus. Mein ist\Ziel. Wählen Sie diesen Ordner als Bibliotheksordner aus. Führen Sie dies in Projekt A aus, um auf Projekt B zu verweisen. Führen Sie dies in Projekt B aus, um auf Projekt A zu verweisen. Jetzt müssen Sie eine Abhängigkeit nicht entfernen und anschließend zurücksetzen, um einen Neuaufbau zu erzwingen. 

Verwenden Sie Klassenbibliotheken anstelle von Projektverweisen.

3
Ryan Zoerner

Manchmal als Warnung kennzeichnen 

Windows -> Einstellungen -> Java -> Compiler -> Gebäude -> Zirkulare Abhängigkeiten

lösen Sie das Problem nicht, da Eclipse keine Projekte kompiliert, die ein anderes Projekt in den Abhängigkeiten enthalten, das nicht kompiliert wurde.

Um dieses Problem zu lösen, können Sie versuchen, elcipse zu zwingen, jede Klasse zu kompilieren, zu der es fähig ist.

Um dies nur zu machen:

  1. Abwählen

    Windows -> Einstellungen -> Java -> Compiler -> Gebäude -> Build abbrechen, wenn Buildpfadfehler auftreten

  2. Reinigen Sie das gesamte Projekt und bauen Sie es neu auf

    Projekt -> Reinigen ...

  3. Erneut auswählen:

    Windows -> Einstellungen -> Java -> Compiler -> Gebäude -> Build abbrechen, wenn Buildpfadfehler auftreten

Wenn Sie die automatische Erstellung ausgewählt haben, müssen Sie dies nicht jedes Mal tun, wenn Sie den Code ändern

2
Sambuccid

Ich war vor einiger Zeit mit einem ähnlichen Problem konfrontiert und beschloss, ein Eclipse-Plug-In zu schreiben, das den vollständigen Baumpfad für Abhängigkeiten eines Java-Projekts zeigt (obwohl nicht im Grafikmodus - das Ergebnis wird in eine Datei geschrieben). Die Quellen des Plug-Ins finden Sie hier http://github.com/PetrGlad/dependency-tree

1
Petr Gladkikh

Neben der Require-Bundle-Form des Abhängigkeitsmanagements (am ähnlichsten zu den Pomp-Abhängigkeiten von Maven) können auch Import-Package-Abhängigkeiten vorhanden sein. Es ist viel einfacher, zirkulare Abhängigkeiten mit Import-Package einzuführen als Require-Bundle, aber YMMV.

Eclipse-Projekte haben auch "Projektreferenzen", aus denen hervorgeht, von welchen anderen Projekten es abhängt. Eclipse verwendet dies auf einer hohen Ebene, um zu entscheiden, welche Projekte in welcher Reihenfolge erstellt werden sollen. Es ist daher möglich, dass Ihr Manifest.MF alles korrekt auflistet, die Projektreferenzen jedoch völlig aus dem Ruder laufen. Klicken Sie mit der rechten Maustaste auf ein Projekt und gehen Sie dann zu den Eigenschaften - Sie sehen, von welchen Projekten Sie abhängig sind. Wenn Sie eine Textperson sind, öffnen Sie die .project-Dateien und sehen Sie sich an, von welchen Dateien Sie dort abhängig sind. Wahrscheinlich wird stattdessen eine zyklische Projektverknüpfung auf dieser Ebene definiert (häufig verursacht, wenn Sie eine AB-Abhängigkeit haben und dann von BA umgedreht, ohne jedoch die .project-Referenzen zu aktualisieren).

1
AlBlue

Maven wird den Build fehlschlagen, wenn ein Zyklus erkannt wird, da die Abhängigkeiten ein Baum sein müssen. 

Möglicherweise haben Sie in der manifest.mf zusätzliche Deklarationen über die in der pom.xml definierten. Jede zusätzliche Deklaration könnte einen Zyklus einführen, der Maven nicht bewusst wäre. 

1
Rich Seller

Versuchen Sie, Referenzen zu löschen und sie wieder hinzuzufügen. Manchmal verhalten sich Eclipse seltsam, da bis und wenn Sie diesen Fehler nicht beheben, keine Aktualisierung möglich ist. Versuchen Sie also, alle Abhängigkeiten zu löschen, und fügen Sie es wieder hinzu Reinigen und erstellen 

0
sjchoudary

Durch einen Neustart von Eclipse wurde das Problem in meinem Projekt behoben

0
user3235783

Dies kann passieren, wenn Sie mehrere Projekte haben, die sich in JAR-Form befinden .. Was ich getan habe, war, alle Bibliotheken und Projektabhängigkeiten von buildpath für alle Projekte zu entfernen. Dann fügte ich nach und nach die Projektabhängigkeiten auf der Registerkarte "Projekt" hinzu, aber nur diejenigen, die benötigt wurden .. _ Dies ist so, weil Sie ein Projekt hinzufügen können, das wiederum selbst referenziert ist, oder ein anderes Projekt, das ein anderes Projekt referenziert dieses selbstbezogene Problem.

Dies hat mein Problem gelöst.

0
Camilo

Ich habe auch dieses Problem. Ich deaktiviere nur die Auflösung des Arbeitsbereichs und dann war alles richtig . Bildbeschreibung hier eingeben

0
Rain

Ich stand heute vor demselben Problem. Der Fehler war treffend. Ich habe aus Versehen eine zyklische Abhängigkeit hinzugefügt. A war auf B angewiesen. In meinem Fall war er irrtümlich abgesehen von der Addition von B als abhängig von A. Ich habe A als abhängig von B hinzugefügt. Es war ein dummer Fehler.

0
MansoorShaikh

Wenn ich diese Probleme hatte, war es immer ein echter Zyklus in den Abhängigkeiten, die in Manifest.mf ausgedrückt werden

Öffnen Sie also das Manifest des jeweiligen Projekts, schauen Sie auf der Registerkarte Abhängigkeiten auf den Eintrag "Required Plugins". Folgen Sie dann von dort zu den nächsten Projekten, und wiederholen Sie den Vorgang, um den Zyklus zu löschen.

Sie können diese Aufgabe etwas vereinfachen, indem Sie die Links zur Abhängigkeitsanalyse in der rechten unteren Ecke der Registerkarte Abhängigkeiten verwenden. Dies hat eine Zykluserkennung und einfachere Navigationsabhängigkeiten.

Ich weiß auch nicht, warum Maven toleranter ist,

0
djna

Obwohl "Mark Circular Dependencies" das Kompilieren des Codes ermöglicht, kann dies zu einer langsameren Umgebung und zukünftigen Problemen führen.

Das passiert, weil Eclipse irgendwann die Anweisungen auf Ihrem Build-Pfad verloren hat.

1 - Entfernen Sie das Projekt und seine Referenzen aus dem Arbeitsbereich . 2 - Importieren Sie es erneut. 3. 3 - Überprüfen Sie die Referenzen.

Es ist die beste Lösung.

0
Machado