Java-Paket-Zyklus-Erkennung: Wie finde ich die spezifischen Klassen beteiligt? [geschlossen]

StackOverflow https://stackoverflow.com/questions/62276

Frage

Welches Tool würden Sie zu erkennen, empfehlen Java-Paket zyklische Abhängigkeiten , wohl wissend, dass das Ziel ist es, Liste explizit die spezifischen in den erfassten beteiligten Klassen ‚über-Pakete Zyklus‘

Ich weiß, über classycle und Metrics hat eine interessante grafische Darstellung von Zyklen, aber es wird wieder auf Pakete beschränkt, und ziemlich schwierig, irgendwann zu lesen.

Ich bin immer müde zu bekommen ein:

  

“Sie ein Paket-Zyklus-Abhängigkeit haben zwischen diesen drei Pakete
   Sie haben xxx Klassen in jedem
   Glück der richtigen Klassen zu finden und bricht diesen Zyklus „

Sie wissen jedes Werkzeug, das den zusätzlichen Schritt nehmen Sie tatsächlich zu erklären, warum der Zyklus erkannt wird (d ‚Liste der beteiligten Klassen‘)?


Riiight ... Zeit, um die Ergebnisse zu verkünden:

@ l7010.de: Vielen Dank für die Mühe. Ich werde Sie vote up (wenn ich genug rep haben werde), vor allem für die ‚GAP‘ Antwort ... aber CAP ist tot im Wasser und nicht mehr kompatibel mit meinem Eclipse-3.4. Der Rest ist kommerziell und ich sehe nur für Freeware.

@ daniel6651: Danke, aber, wie gesagt, nur Freeware (sorry es nicht in erster Linie erwähnt hat)

.

@izb als ein häufiger Benutzer der findbugs (mit den neuesten 1.3.5 jetzt), ich bin mit einem Klick Ihre Antwort zu akzeptieren ... wenn Sie mir erklären können, was Option es zu aktivieren, ist für findbug zu erkennen jeder Zyklus. Dieses Feature ist nur für die 0.8.7 Version in vorbei (suchen Sie nach ‚ New Style-Detektor zirkuläre Abhängigkeiten zwischen den Klassen zu finden '), und ich bin nicht in der Lage, es zu testen. Update: Es funktioniert jetzt, und ich hatte eine alte findbugs Konfigurationsdatei, in der diese Option nicht aktiviert wurde. Ich immer noch wie CAD obwohl;)

Die Antwort ist ... siehe

Andere Tipps

Nun ... nach dem Test DepFinder oben präsentiert, stellt sich heraus, es für eine schnelle Erkennung von einfachen Abhängigkeiten ist groß, aber es skaliert nicht gut mit der Anzahl der Klassen ...

Die eigentliche tatsächliche Antwort ist: CDA - Klasse Dependency Analyzer

Es ist schnell, up-to-date, einfach zu bedienen und bietet mit grafischer Darstellung der Klassen und ihren zirkulären Abhängigkeiten. Ein Traum wird wahr;)

Sie müssen ein Workset erstellen, in dem Sie nur das Verzeichnis Ihrer Klassen eingeben (.class) (keine Notwendigkeit, eine komplette Classpath haben)
Die Option "Detect zirkuläre Abhängigkeiten - ALT - C ". Werke wie werben und nimmt nicht 100% der CPU stundenlang meine 468 Klassen zu analysieren
Hinweis: Um einen Arbeitsbereich zu aktualisieren, müssen Sie es erneut öffnen, um einen neuen Scan Ihrer Klassen auslösen

(!).

Screenshot

Wir verwenden Sonar Paket-Zyklen zu erkennen. Es zieht eine schöne grafische Darstellung der Abhängigkeiten und zeigt, welche diejenigen in der falschen Richtung gehen. Sie können auch auf die Quelle navigieren, in dem die Abhängigkeit verwendet wird.

Siehe http: // www .sonarsource.org / Kampf-back-Design-Erosion-by-breaking-Zyklen-mit-Sonar /

Es gibt auch Structure101 was sollte dies tun.

Highwheel erkennt Klassen- und Paketzyklen und meldet die Quelle der Abhängigkeiten bis zur Klasse / Methode die Art der Beziehung (Vererbung, die Zusammensetzung, Teil einer Methodensignatur, etc.) / Feldebene angibt.

Es bricht auch große Zyklen in ihre Unterelemente, die verstanden werden kann / in Angriff genommen einzeln.

Der Ausgang ist HTML mit eingebetteten SVG Inhalten, die einen modernen Browser benötigt.

Und Sie können das Open-Source-Tool verwenden, CAP das ist eine Eclipse-Plugin.

CAP hat eine grafische Paket Ansicht, die Ihnen um die Linien zu den Klassen so nach einigen Klicks angezeigt werden (abhängig von der Größe des Kreises) Sie die Täter finden.

Eine erste mögliche Antwort ist ... nicht schön. Aber es beginnt zu tun, was ich bin nach (Eine bessere Lösung unten dargestellt ).

Dependency Finder ! Laden Sie es , entpacken Sie es.

Es ist nicht das modernste oder aktive Projekt immer, aber wenn Sie bearbeiten [Dependency Finder] /bin/DependencyFinder.bat, fügen Sie den Weg für DEFAULT_DEPENDENCYFINDER_HOME, stellen ein JAVA_HOME, können Sie es starten.

Dann klicken Sie auf den ‚Extract‘ Taste (CTRL-E - erste Schaltfläche), Klassen Pfad eingeben, und lassen Sie es scannen weg

.

Der schwierige Teil ist genau die richtige Menge von ‚Programmierelementen‘ klicken und ‚Verschlüsse‘ Artikeln, um nicht von der Höhe der Details im Ergebnis überschwemmt worden.

  • Wählen Sie nur 'Klassen' in der linken Seite ( 'Programmierelemente').
  • Wählen Sie nur 'Klassen' in der rechten Seite ( 'Verschlüsse').
  • Add "/javax?./,/org./,/sun./" als Ausschlussmuster (für beide Programmierelemente und Schließungen).
  • Klicken Sie auf den Rädern (letzte Taste - Compute alle - Strg + A ).

Und hier gehen Sie.

Jedes Mal, wenn Sie sehen, '<->' Sie haben sich ein schönes bekam zyklische Abhängigkeit . (Wenn Sie ‚Eigenschaften‘ auf der ‚Schließung‘ Seite auswählen, können Sie auch wissen, welche Funktion den Zyklus auslöst -. Ehrfürchtigen)

Ich bin bereit, andere Vorschläge zu prüfen.

Es gibt einige kommerzielle Werkzeuge:. Structure101 & Lattix, die für diesen Zweck verwendet werden können

Ein Werkzeug, das tut dies die Software Tomograph . Es ist kommerziell und die UI saugt: o

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top