Java Package Cycle Detection: Wie finde ich die beteiligten Klassen?
Welches tool würden Sie empfehlen, um zu erkennen, Java-Paket zyklische Abhängigkeiten
wissen, dass das Ziel ist Liste explizit die spezifischen Klassen beteiligt, die erkannt 'über-Pakete-Zyklus'?
Weiß ich über classycle und JDependaber Sie scheitern, die Klassen auflisten, die eingebunden in eine zyklische Paket-Abhängigkeit. Metriken hat eine interessante grafische Darstellung der Zyklen, aber es ist wieder auf Pakete, und ziemlich schwer zu Lesen, irgendwann.
Ich bin müde zu bekommen:
" Sie haben eine Paket-Zyklus-Abhängigkeit zwischen diesen 3 Paketen
Sie haben xxx-Klassen in jedem
gut Glück die Suche nach den richtigen Klassen und brechen dieses Zyklus "
Kennen Sie eine tool, das den zusätzlichen Schritt, um tatsächlich erklären Sie, warum der Zyklus erkannt wird (d.h. 'Liste der beteiligten Klassen')?
Riiight... die Zeit, verkünden die Ergebnisse:
@l7010.de: vielen Dank für die Mühe. Ich Stimmen Sie (wenn ich genug rep), vor allem für die 'KAPPE' Antwort... aber CAP ist tot im Wasser und nicht mehr kompatibel mit meinem Eclipse 3.4. Der rest ist kommerziell und ich schauen nur für freeware.
@daniel6651: Danke, aber, wie gesagt, die freeware nur (sorry, nicht erwähnt haben es in den ersten Platz).
@izb als häufiger Benutzer von findbugs (mit der neuesten 1.3.5 jetzt), ich bin nur einen Klick entfernt zu akzeptieren, Ihre Antwort... wenn Sie könnten mir erklären, was die option es zu aktivieren findbug zu erkennen-Zyklus. Dieses feature wird nur erwähnt, für die Version 0.8.7 im Vorbeigehen (suchen Sie nach 'Neue Stil-Detektor zu finden zyklischen Abhängigkeiten zwischen Klassen'), und ich bin nicht in der Lage, um es zu testen.
Update: Es funktioniert jetzt, und ich hatte einen alten findbugs-Konfigurations-Datei, in der diese option noch nicht aktiviert war. Ich mag immer noch CAD obwohl 😉
DIE ANTWORT ist... siehe meine eigene (zweite) Antwort unten
InformationsquelleAutor der Frage VonC | 2008-09-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Findbugs kann erkennen, kreisförmigen Klasse Abhängigkeiten und ist ein Eclipse-plugin zu.
http://findbugs.sourceforge.net/
InformationsquelleAutor der Antwort izb
Gut... nach der Prüfung DepFinder oben dargestelltes stellt sich heraus, dass es ist ideal für eine schnelle Erkennung von einfachen Abhängigkeiten, aber es ist nicht gut skalierbar mit der Anzahl der Klassen...
Also die ECHTE EIGENTLICHE ANTWORT ist:
CDA - Klasse Dependency Analyzer
Es ist schnell, up-to-date, einfach zu bedienen und bietet mit der grafischen Darstellung von Klassen und Ihren zyklischen Abhängigkeiten. Ein Traum wird wahr 😉
Erstellen Sie ein workset, in dem Sie geben Sie nur das Verzeichnis der Klassen (.Klasse) (keine Notwendigkeit, einen kompletten classpath)
Die option "Erkennen von zirkulären Abhängigkeiten - ALT-C" funktioniert als Werbung und nicht 100% der CPU für Stunden zu analysieren, meine 468 Klassen.
Hinweis: aktualisieren Sie einen Arbeitsbereich, die Sie brauchen, um es erneut zu öffnen(!), um trigger einen neuen scan von deine Klassen.
InformationsquelleAutor der Antwort VonC
Verwenden wir Sonar zum erkennen von Paket-Zyklen. Es zieht ein schöner graph, der die Abhängigkeiten und zeigt, welche in die falsche Richtung gehen. Sie können auch navigieren Sie zu der Quelle, wo die Abhängigkeit verwendet.
Sehen http://www.sonarsource.org/fight-back-design-erosion-by-breaking-cycles-with-sonar/
InformationsquelleAutor der Antwort Stijn Van Bael
Gibt es auch Structure101 die sollte dies tun.
InformationsquelleAutor der Antwort squiddle
Highwheel erkennt Klassen-und package-Zyklen und meldet die Quelle die Abhängigkeiten nach unten, um die Klasse/Methode/Feld-Ebene mit Angabe der Art der Beziehung (Vererbung, Komposition, Teil einer Methode, Signatur, etc.).
Es bricht auch große Zyklen, die sich in Ihre sub-Elemente, die verstanden werden kann/individuell angegangen.
Die Ausgabe ist HTML mit eingebetteten SVG-Inhalte, die erfordert, dass Sie einen modernen browser.
InformationsquelleAutor der Antwort henry
Und Sie können die open-source-tool GAP was ist ein Eclipse-plugin.
CAP hat eine grafische Paket anzeigen, die Ihnen zeigen, wird die Zeilen zu den Klassen, so nach ein paar Klicks (je nach Größe des Kreises), werden Sie den Schuldigen finden.
InformationsquelleAutor der Antwort squiddle
Erste mögliche Antwort ist... nicht schön. Aber es nicht anfangen zu tun, was ich bin nach
(eine bessere Lösung ist vorgestellt unten).
Dependency Finder! Herunterladenentpacken Sie es.
Es ist nicht das modernste oder das aktive Projekt immer, aber wenn Sie edit [Dependency Finder]/bin/DependencyFinder.Fledermaus, fügen Sie den Pfad für DEFAULT_DEPENDENCYFINDER_HOME, setzen Sie eine Umgebungsvariable JAVA_HOME, Sie können starten Sie es.
Dann klicken Sie auf den "Extrahieren" - Taste (STRG-E - der erste button), geben Sie Ihren Klassen Weg, und lassen Sie es Scannen entfernt.
Der schwierige Teil ist, klicken Sie auf genau die richtige 'Programmierung Elemente' und 'Verschlüsse' Elemente, um nicht überschwemmt worden, indem das Niveau des details in der Folge.
Und hier gehen Sie.
Wann immer Sie sehen, '<->', haben Sie selbst einen schönen zyklische Abhängigkeit. (Wenn Sie die Option 'Eigenschaften' auf der 'Schließung' Seite, können Sie sogar wissen, welche Funktion löst die Zyklus - genial.)
Ich bin bereit zu testen, die die anderen Vorschläge.
InformationsquelleAutor der Antwort VonC
Gibt es einige kommerzielle tools: Structure101 & Lattix, die können für diesen Zweck verwendet werden.
InformationsquelleAutor der Antwort
Einem tool, was dies tut, ist die software Tomographen. Es ist das Handels-und das UI nervt 😮
InformationsquelleAutor der Antwort squiddle