web-dev-qa-db-fra.com

Java Détection du cycle d'emballage: Comment trouver les classes spécifiques impliquées?

Quel outil recommanderiez-vous de détecter Java package cyclique dépendances , sachant que l'objectif est de liste explicitement les classes spécifiques impliquées dans la détection " Cycle à travers les packages '?

Je sais sur Classycle et jDepend , mais ils ne parviennent pas à énumérer les classes impliquées dans une dépendance cyclique. Metrics a une représentation graphique intéressante des cycles, mais elle est à nouveau limitée aux emballages et assez difficiles à lire de temps en temps.

Je suis fatigué pour obtenir un:

"Vous avez une dépendance du cycle de paquet entre ces 3 packages
[.____] Vous avez des classes xxx dans chaque
[.____] bonne chance de trouver les bonnes classes et de briser ce cycle "

Connaissez-vous un outil qui prend une étape supplémentaire pour vous expliquer pourquoi le cycle est détecté (c'est-à-dire "liste des classes impliquées")?


Riiight ... le temps de proclamer les résultats:

@ l7010.de: Merci pour l'effort. Je vous voterai (lorsque j'aurai suffisamment de représentant), surtout pour la réponse "Cap" ... mais la casquette est morte dans l'eau et n'est plus compatible avec mon éclipse 3.4. Le reste est commercial et je ne regarde que pour le libre-logement.

@ Daniel6651: Merci mais, comme dit, Freeware seulement (désolé de ne pas l'avoir mentionné en premier lieu).

@izb en tant qu'utilisateur fréquent de Findbugs (à l'aide du dernier 1.3.5 en ce moment), je suis un clic à l'écart pour accepter votre réponse ... Si vous pouviez m'expliquer quelle option il y a pour activer pour Findbug pour détecter tout cycle. Cette fonctionnalité n'est mentionnée que pour la version 0.8.7 en passant (Recherchez "Nouveau détecteur de style pour trouver des dépendances circulaires entre les classes '), et je Je ne suis pas capable de le tester. MISE À JOUR: Cela fonctionne maintenant et j'avais un ancien fichier de configuration Findbugs dans lequel cette option n'était pas activée. J'aime toujours [~ # ~] CAD [~ # ~ ~] cependant;)

La réponse est ... Voir My propre (deuxième) réponse ci-dessous

38
VonC

Les retrouvés peuvent détecter les dépendances de la classe circulaire et disposer d'un plugin Eclipse également.

http://finindbugs.sourceforge.net/

14
izb

Eh bien ... Après avoir testé Depfinder présenté ci-dessus , il s'avère qu'il est idéal pour une détection rapide de simples dépendances, mais cela ne fait pas bien échouer avec le nombre de classes ...

Donc, la réponse réelle réelle est la suivante: analyseur de dépendance de la classe CDA

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 travail de travail dans lequel vous n'entrez que le répertoire de vos classes (.Class) (pas besoin d'avoir une classe de classe complète)
[.____] l'option "détecter les dépendances circulaires - ALT-C"Fonctionne comme annoncé de la publicité et ne prend pas 100% de la CPU pendant des heures pour analyser mes 468 classes.
[.____] NOTE: Pour rafraîchir un espace de travail, vous devez l'ouvrir à nouveau (!), Afin de déclencher une nouvelle analyse de vos classes.

screenshot

25
VonC

HighWeel Détecte les cycles de classe et de l'emballage et rapporte la source des dépendances jusqu'à la classe/méthode/champ indiquant le type de relation (héritage, composition, une partie d'une signature de méthode, etc.).

Il brise également les gros cycles dans leurs sous-éléments pouvant être compris/abordés individuellement.

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

4
henry

Il y a aussi Structure101 qui devrait le faire.

4
squiddle

Nous utilisons Sonar pour détecter les cycles de colis. Il dessine un bon graphique des dépendances et montre ceux qui vont dans la mauvaise direction. Vous pouvez même naviguer à la source où la dépendance est utilisée.

Voir http://www.sonarsource.org/fight-back-Design-erosion-bith -breing-cycles-with-sonar/

4
Stijn Van Bael

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

Finder de dépendance ! Téléchargez-le , décalez-le.

Ce n'est pas le projet le plus moderne ou actif de tous les temps, mais si vous éditez [Finder de dépendance] /bin/dependencendencendenfinder.bat, ajoutez son chemin pour défaut_dependencendenfinder_Home, définissez un Java_Home, vous pouvez le lancer.

Ensuite, vous cliquez sur le bouton "extrait" (Ctrl-e - premier bouton), entrez votre chemin de classe et laissez-le s'éloigner.

La partie délicate consiste à cliquer exactement le bon ensemble d'éléments "éléments de programmation" et "éléments de fermeture", afin de ne pas être submergé par le niveau de détails de la suite.

  • Sélectionnez uniquement les "classes" sur le côté gauche ("éléments de programmation").
  • Sélectionnez uniquement les "classes" dans le côté droit ("fermetures").
  • Ajouter "/javax??/,/org./,/sun./" Comme modèle d'exclusion (pour les éléments de programmation et les fermetures).
  • Cliquez sur les roues (dernier bouton - calculer tout - CtrlA).

Et vous y allez.

Chaque fois que vous voyez '<->', vous avez vous-même un gentil Dépendance cyclique . (Si vous sélectionnez "Caractéristiques" sur le côté "Fermeture", vous pouvez même savoir quelle fonction déclenche le cycle - génial.)

Je suis prêt à tester toute autre suggestion.

1
VonC

Et vous pouvez utiliser l'outil open source [~ # ~ # ~] [~ # ~ # ~] qui est un plug-in Eclipse.

Cap a une vue d'emballage graphique qui vous montrera les lignes aux classes ainsi après quelques clics (en fonction de la taille du cercle), vous trouverez le coupable.

1
squiddle

Un outil qui fait ceci est le logiciel tomographe . Il est commercial et l'interface utilisateur suce: o

0
squiddle

Certains outils commerciaux sont: Structure101 et Lattix qui peuvent être utilisés à cette fin.

0
daniel6651