Détection du cycle de package Java: comment trouver les classes spécifiques impliquées?

Quel outil recommanderiez-vous pour détecter les dépendances cycliques de package Java , sachant que l’objective est de répertorier explicitement les classes spécifiques impliquées dans le «cycle inter-packages» détecté ?

Je connais classycle et JDepend , mais ils ne parviennent pas tous deux à répertorier les classes impliquées dans une dépendance de paquet cyclique. Mesortingcs présente une représentation graphique intéressante des cycles, mais elle est à nouveau limitée aux packages et assez difficile à lire de temps en temps.

Je suis fatigué pour obtenir un:

“vous avez une dépendance de cycle de paquet entre ces 3 paquets
vous avez xxx classes dans chaque
bonne chance pour trouver les bonnes classes et briser ce cycle “

Connaissez-vous un outil qui demande une explication supplémentaire du pourquoi du cycle est détecté (par exemple, “lister les classes impliquées”)?


Riiight … Il est temps de proclamer les résultats:

@ l7010.de: Merci pour l’effort. Je vous voterai (quand j’aurai assez de représentants), en particulier pour la réponse ‘CAP’ … mais CAP est mort dans l’eau et n’est plus compatible avec mon Eclipse 3.4. Le rest est commercial et je ne cherche que des logiciels gratuits.

@ daniel6651: Merci, mais comme dit, uniquement du freeware (désolé de ne pas l’avoir mentionné en premier lieu).

@izb en tant qu’utilisateur fréquent de findbugs (avec la dernière version 1.3.5 actuellement), je suis à un clic pour accepter votre réponse … si vous pouviez m’expliquer quelle option il y a à activer pour que findbug détecte tout cycle. Cette fonctionnalité est seulement mentionnée pour la version 0.8.7 en passant (cherchez ‘ Détecteur de nouveau style pour trouver des dépendances circulaires entre les classes ‘), et je ne suis pas en mesure de la tester. Mise à jour: Cela fonctionne maintenant et j’avais un ancien fichier de configuration de findbugs dans lequel cette option n’était pas activée. J’aime toujours CAD mais;)

LA RÉPONSE est … voyez ma propre (deuxième) réponse ci-dessous

Findbugs peut détecter les dépendances de classe circulaires et dispose également d’un plugin Eclipse.

http://findbugs.sourceforge.net/

Eh bien … après avoir testé DepFinder présenté ci – dessus , il s’avère que c’est excellent pour la détection rapide de dépendances simples, mais il ne s’adapte pas bien au nombre de classes …

Donc, la RÉPONSE RÉELLE RÉELLE est: CDA – Analyseur de dépendances de classe

Il est rapide, à jour, facile à utiliser et fournit une représentation graphique des classes et de leurs dépendances circulaires. Un rêve devenu réalité 😉

Vous devez créer un sous-projet dans lequel vous entrez uniquement le répertoire de vos classes (.class) (il n’est pas nécessaire d’avoir un chemin d’access complet).
L’option “Détecter les dépendances circulaires – ALTC ” fonctionne comme une publicité et ne prend pas 100% de l’unité centrale pendant des heures pour parsingr mes 468 classes.
Remarque: pour actualiser un espace de travail, vous devez le rouvrir (!) Afin de déclencher une nouvelle parsing de vos classes.

capture d'écran

Nous utilisons Sonar pour détecter les cycles de paquet. Il trace un beau graphique des dépendances et indique celles qui vont dans la mauvaise direction. Vous pouvez même accéder à la source où la dépendance est utilisée.

Voir http://www.sonarsource.org/fight-back-design-erosion-by-breaking-cycles-with-sonar/

Il y a aussi Structure101 qui devrait le faire.

Highwheel détecte les cycles de classe et de package et rapporte la source des dépendances jusqu’au niveau classe / méthode / champ en indiquant le type de relation (inheritance, composition, partie d’une signature de méthode, etc.).

Il divise également les cycles importants en sous-éléments qui peuvent être compris / traités individuellement.

La sortie est au format HTML avec un contenu SVG intégré qui nécessite un navigateur moderne.

Et vous pouvez utiliser l’outil open source CAP qui est un plugin Eclipse.

CAP a une vue graphique des paquets qui vous montrera les lignes aux classes. Après quelques clics (en fonction de la taille du cercle), vous trouverez le coupable.

Une première réponse possible est … pas jolie. Mais il commence à faire ce que je cherche (une meilleure solution est présentée ci-dessous ).

Dépendeur Finder ! Téléchargez-le , décompressez-le.

Ce n’est pas le projet le plus moderne ou le plus actif à ce jour, mais si vous éditez [Recherche de dépendances] /bin/DependencyFinder.bat, ajoutez son chemin pour DEFAULT_DEPENDENCYFINDER_HOME, définissez un JAVA_HOME, vous pouvez le lancer.

Ensuite, vous cliquez sur le bouton ‘Extraire’ (CTRL-E – premier bouton), entrez votre chemin d’access aux classes et laissez-le scanner.

La partie délicate consiste à cliquer exactement sur le bon ensemble d’éléments «éléments de programmation» et «fermetures», afin de ne pas être submergé par le niveau de détails dans le résultat.

  • Sélectionnez uniquement les «classes» dans la partie gauche («éléments de programmation»).
  • Sélectionnez uniquement “classes” dans le côté droit (“fermetures”).
  • Ajoutez “/javax?./,/org./,/sun./” en tant que modèle d’exclusion (pour les éléments de programmation et les fermetures).
  • Cliquez sur les roues (dernier bouton – Tout calculer – Ctrl + A ).

Et voilà.

Chaque fois que vous voyez ‘<->‘, vous avez une belle dépendance cyclique . (Si vous sélectionnez “caractéristiques” du côté “fermeture”, vous pouvez même savoir quelle fonction déclenche le cycle – génial.)

Je suis prêt à tester d’autres suggestions.

Il existe quelques outils commerciaux: Structure101 & Lattix qui peuvent être utilisés à cette fin.

Un outil qui fait cela est le logiciel tomographe . C’est commercial et l’interface utilisateur est nulle: o