2008-09-15 19 views
31

Welches Werkzeug würden Sie empfehlen ‚across-Pakete Zyklus‘,
zu wissen, dass das Ziel zu Liste ist explizit die spezifischen Klassen der detektierten beteiligt Java-Paket zyklische Abhängigkeiten zu erkennen?Java Package Cycle Detection: Wie finde ich die spezifischen Klassen?

Ich weiß über classycle und JDepend, aber sie beide nicht die Klassen in einem zyklischen Paket Abhängigkeit aufgeführt.
Metrics hat eine interessante grafische Darstellung von Zyklen, aber wiederum beschränkt auf Pakete, und ziemlich schwer zu lesen, irgendwann.

Ich bin immer müde eine bekommen:

"Sie haben ein Paket-Zyklus Abhängigkeit zwischen diesen drei Pakete
Sie haben xxx Klassen in jedem
viel Glück die richtigen Klassen zu finden, und brechen Sie diesen Zyklus "

Kennen Sie irgendein Werkzeug, das die ex nimmt tra Schritt, um Ihnen zu erklären, warum der Zyklus erkannt wird 'Liste der beteiligten Klassen')?


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

@ l7010.de Dank für die Mühe danken. Ich werde dich wählen (wenn ich genug Rep), vor allem für die 'CAP' Antwort ... aber CAP ist tot im Wasser und nicht mehr kompatibel mit meiner Eclipse 3.4. Der Rest ist kommerziell und ich sehe nur für Freeware

@ daniel6651 danke aber, wie gesagt, nur Freeware (sorry es nicht haben an erster Stelle erwähnt)

@izb als häufige Nutzer von findbugs (ich benutze die neueste Version 1.3.5), ich bin nur einen Klick entfernt, um deine Antwort zu akzeptieren ... wenn du mir erklären könntest, welche Option aktiviert werden soll, damit ein Fahndler einen Zyklus erkennt. Diese Funktion wird nur für die 0.8.7 version in passing erwähnt (suchen Sie nach 'New Style-Detektor, um zirkuläre Abhängigkeiten zwischen Klassen zu finden'), und ich bin nicht in der Lage, es zu testen.
Update: funktioniert jetzt, ich hatte eine alte Findbugs-Konfigurationsdatei, in der diese Option nicht aktiviert war. Ich mag CAD noch obwohl;)

Die Antwort ist ... my own (second) answer below

+0

Setzen Sie einfach die Antwort in die Frage statt. Jeeps Informationen zusammen. –

Antwort

1

Und Sie können das Open-Source-Tool CAP verwenden, die ein Eclipse-Plugin ist. http://cap.xore.de/ CAP hat eine grafische Paketansicht, die Ihnen die Linien zu den Klassen zeigt, so dass Sie nach einigen Klicks (abhängig von der Größe des Kreises) den Schuldigen finden werden.

0

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

1

eine erste mögliche Antwort ist ... nicht schön. Aber es fängt an zu tun, wonach ich suche. (eine bessere Lösung ist presented below)

Dependency Finder! Download it, entpacken Sie es.

Nicht das modernste oder aktive Projekt aller Zeiten, aber wenn Sie [Dependency Finder] /bin/DependencyFinder.bat bearbeiten, fügen Sie seinen Pfad für DEFAULT_DEPENDENCYFINDER_HOME hinzu, legen Sie einen JAVA_HOME fest, und Sie können ihn starten.

Dann klicken Sie auf die Schaltfläche "Extrahieren" (CTRL-E - erste Schaltfläche), geben Sie Ihren Klassenpfad ein und lassen Sie ihn absuchen.

Der schwierige Teil ist, genau die richtige Menge von "Programmierelementen" und "Verschlüsse" zu klicken, um nicht von der Detailebene im Ergebnis überflutet zu werden.

  • 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 Verschlüsse)
  • Klicken Sie auf die Räder (letzte Taste - Compute alle - CTRL A)

und hier gehen Sie.
Immer wenn Sie '< ->' sehen, haben Sie eine nette zyklische Abhängigkeit.
(Wenn Sie ‚Eigenschaften‘ auf der ‚Schließung‘ Seite auswählen,
Sie können sogar wissen, welche Funktion den Zyklus auslöst - genial -)

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

21

Nun ... nach DepFinder presented above Prüfung, es stellt sich heraus, es ist ideal für eine schnelle Erkennung von einfachen Abhängigkeiten, aber es skaliert nicht gut mit der Anzahl der Klassen ...

So die reale IST ANTWORT ist : CDA - Class Dependency Analyzer

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

Sie haben einen Workset zu erstellen, in dem Sie nur das Verzeichnis Ihrer Klassen (.class) eingeben (keine Notwendigkeit, eine vollständige Classpath haben)
Die Option „Detect zirkuläre Abhängigkeiten - ALT - C "funktioniert als Werbung und dauert nicht 100% der CPU für Stunden, um meine 468 Klassen zu analysieren.
Hinweis: Um einen Arbeitsbereich zu aktualisieren, müssen Sie ihn erneut öffnen (!), Um einen neuen Scan Ihrer Klassen auszulösen.

screenshot

+0

wirklich schönes Werkzeug. – 99Sono

3

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

Es unterbricht auch große Zyklen in ihre Unterelemente, die einzeln verstanden werden können.

https://github.com/hcoles/highwheel

Der Ausgang ist HTML mit eingebettetem svg, die einen modernen Browser benötigt.