Wie löst man die zyklische Abhängigkeit zwischen verschiedenen Modulen in einem Projekt in Eclipse?

7

Das Problemprotokoll in eclipse zeigt an, dass "ein Zyklus im Build-Pfad des Projekts gefunden wurde ..." Sie haben eine Idee, was zu tun ist, um diese zyklischen Abhängigkeiten los zu werden? Ich weiß nicht, welche Projekte voneinander abhängig sind.

    
Gaurav Pant 20.06.2013, 08:02
quelle

7 Antworten

2

In der Projekteinstellung können Sie die Abhängigkeiten sehen, was Sie tun könnten, ist alle Abhängigkeiten zu entfernen und einen dep nach dem anderen hinzuzufügen. Ein Zyklus bedeutet, dass Sie es nicht so gemacht haben sollten. Ihre Lösungen nach dem Identifizieren der Klassen, lassen Sie sagt Ihr großes Projekt A erfordert Klasse CB1 von sekundären Projekt B und CB1 erfordert Klasse CA1 von Projekt A:

  • Verschieben Sie eine Klasse CB1 in das Projekt A, um die Abhängigkeit zu entfernen - & gt; funktioniert, wenn es nicht mehr Abhängigkeiten erzeugt.
  • Extrahieren Sie Interfaces und verwenden Sie nicht abhängige Interfaces (Sie müssen möglicherweise abhängig von Ihrer Struktur Superklassen oder mehr Interfaces erstellen).
  • anders implementieren, warum benötigen Sie speziell Klasse aus anderen Projekten? Verwenden Sie ggf. gemeinsame Elternklassen
TecHunter 20.06.2013, 08:29
quelle
12

Sie können den Schweregrad der zirkulären Abhängigkeiten in Eclipse anpassen:

%Vor%     
JREN 20.06.2013 08:06
quelle
3

Eine zyklische Abhängigkeit in der Eclipse zeigt an, dass es einen Zyklus in den Buildpfaden zwischen Projekten in Eclipse gibt.

Wenn Sie also 5 Projekte haben, sagen wir A, B, C, D und E, dann könnte eine zyklische Abhängigkeit sein:

  1. A benötigt B in seinem Build-Pfad
  2. B benötigt D in seinem Build-Pfad
  3. D benötigt A in seinem Build-Pfad

Daher ist A->B->D->A ein Zyklus.

Aufgrund dieses Zyklus weiß Eclipse nicht, welches Projekt zuerst kompiliert werden soll.

Sie müssen Ihren Code umgestalten, um diese zyklische Abhängigkeit zu entfernen. Wenn der tatsächliche Code keine Abhängigkeiten aufweist, entfernen Sie die nicht benötigten Buildpfadeinträge.

    
Rajesh J Advani 20.06.2013 08:15
quelle
2

Es gibt drei Möglichkeiten, die zyklische Abhängigkeit zwischen Projekten in Eclipse zu entfernen,

1. Gehe zum Projekt- & gt; Java-Compiler- & gt; Gebäude - & gt; Aktivieren Sie projektspezifische Einstellungen.
Wählen Sie Build-Pfad Probleme und geben Sie eine Warnung als Option für zirkuläre Abhängigkeit.

2. Gehe zum Projekt- & gt; Java Build Pfad. Wählen Sie auf der Registerkarte "Projekte" das Projekt aus und entfernen Sie es.

3.Gehen Sie zu Ihrem META-INF Ordner, öffnen Sie MANIFEST.MF. Auf der Registerkarte MANIFEST.MF können Sie das zyklisch abhängige Projekt in der Spalte "Paket importieren" sehen.
Entfernen Sie das Projekt aus der Spalte.

Die erste Option löst den Fehler nicht wirklich. Die zweite und die dritte Option sind der richtige Weg, um diese Abhängigkeit zu lösen.

    
HareshKannan 21.05.2015 04:56
quelle
0

Um die Abhängigkeiten zwischen einfachen Java-Projekten herauszufinden, gehen Sie zu Projekteigenschaften | Java-Erstellungspfad | Projekte. Wenn Sie J2EE-Projekte haben, gibt es eine zusätzliche Einstellung in Projekteigenschaften | Projekt Referenzen. Überprüfen Sie diese für all Ihre Projekte, erstellen Sie das Diagramm auf einem Blatt Papier (oder Bildschirm) und sehen Sie, was Sie tun können, um den Zyklus zu unterbrechen.

Normalerweise hat ein gesundes Abhängigkeitsdiagramm die Form eines Sterns, wobei ein Kernprojekt gemeinsame Ressourcen enthält und jedes Blattprojekt eine bestimmte Benutzerfunktionalität implementiert. Im Detail kann der Kern tatsächlich aus mehreren voneinander abhängigen Projekten bestehen; dasselbe für größere Blätter.

Ein typischer Weg aus einem Abhängigkeitszyklus ist das Zusammenführen mehrerer eng gekoppelter Projekte.

    
Marko Topolnik 20.06.2013 08:27
quelle
0

Sie müssen möglicherweise Ihre Projekte oder den Code selbst umgestalten. Es könnte ein Problem mit der Verpackung mit Ihrer Anwendung sein.

    
Balint Bako 20.06.2013 08:29
quelle
0

Ich war vor langer Zeit auf dieses Problem gestoßen, und obwohl ich vergessen habe, wie ich das gelöst habe, hatte ich den Empfänger, als es darum ging, von einer Klasse im erforderlichen Projekt zu einer im anfordernden Projekt zu kommunizieren Installieren Sie ein java.lang.reflect.Method-Objekt im Absender, wo es aufgerufen werden könnte, ohne die sendee-Klasse im Code des Absenders zu deklarieren.

Ich bin mir sicher, dass es dafür bevorzugte Wege gibt, wie Sender und Empfänger eine Schnittstelle teilen, aber im Hinblick auf die Codierungsökonomie scheint dies die einfachste zu sein.

Wie andere Antworten zu sagen schienen, scheint dies keine echte Zirkularität zu sein, sondern eher ein Artefakt des Eclipse-Designs.

    
Jerry Miller 12.02.2015 19:46
quelle

Tags und Links