2008-09-15 7 views
31

Quel outil recommanderiez-vous pour détecter dépendances cycliques paquet java,
sachant que l'objectif est de liste explicitement les classes spécifiques impliquées dans la détection « à travers-paquets cycle »?Détection de cycle java: comment trouver les classes spécifiques impliquées?

Je connais environ classycle et JDepend, mais ils ne parviennent pas à lister les classes impliquées dans une dépendance de paquet cyclique.
Metrics a une représentation graphique intéressante des cycles, mais encore limitée aux paquets, et assez difficile à lire parfois.

Je fatiguais pour obtenir un:

"vous avez une dépendance de cycle de package entre ces 3 paquets
vous avez des classes xxx dans chaque
bonne chance pour trouver les bonnes classes et rompre ce cycle "

Connaissez-vous un outil qui prend l'ex tra étape pour vous expliquer réellement pourquoi le cycle est détecté (c.-à-d. 'liste les classes impliquées')?


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

@ l7010.de merci pour l'effort. Je vais vous voter (quand j'aurai assez de rep), surtout pour la réponse 'CAP' ... mais CAP est mort dans l'eau et n'est plus compatible avec mon éclipse 3.4. Le reste est commercial et je regarde seulement pour freeware

@ daniel6651 merci, mais, comme l'a dit, freeware seulement (désolé de ne pas avoir mentionné en premier lieu)

@izb en tant qu'utilisateur fréquent de findbugs (en utilisant le dernier 1.3.5 en ce moment), je suis à un clic pour accepter votre réponse ... si vous pouviez m'expliquer quelle option activer pour findbug pour détecter n'importe quel cycle. Cette fonctionnalité n'est mentionnée que pour le 0.8.7 version in passing (recherchez 'Nouveau détecteur de style pour trouver des dépendances circulaires entre les classes'), et je ne suis pas en mesure de le tester.
Mise à jour: fonctionne maintenant, j'avais un vieux fichier de configuration findbugs dans lequel cette option n'a pas été activée. J'aime encore CAD bien;)

La réponse est ... voir my own (second) answer below

+0

Mettez simplement la réponse dans la question à la place. Jeeps informations ensemble. –

Répondre

1

Et vous pouvez utiliser l'outil open source CAP qui est un plugin eclipse. http://cap.xore.de/ CAP a une vue de paquet graphique qui vous montrera les lignes aux classes ainsi après quelques clics (selon la taille du cercle) vous trouverez le coupable.

0

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

1

une première réponse possible est ... pas jolie. Mais ça commence à faire ce que je suis après. (une meilleure solution est presented below)

Dependency Finder! Download it, décompressez-le.

Ce n'est pas le projet le plus moderne ou le plus actif, mais si vous éditez [Dependency Finder] /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 de classes, et laissez-le balayer. Le plus difficile est de 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 'classes' dans la partie gauche ('éléments de programmation')
  • Sélectionnez uniquement 'classes' du côté droit ('fermetures')
  • add « /javax?./,/ org./,/sun./ » comme motif d'exclusion (pour les éléments de programmation et fermetures)
  • Cliquez sur les roues (dernier bouton - Compute tous - CTRL A)

et voilà.
Chaque fois que vous voyez '< ->', vous obtenez une bonne dépendance cyclique .
(Si vous sélectionnez « caractéristiques » du côté « de fermeture »,
vous pouvez même savoir quelle fonction ne déclenche le cycle - génial -)

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

21

Eh bien ... après avoir testé DepFinder presented above, il se trouve qu'il est grand pour une détection rapide des dépendances simples, mais il n'échelle pas bien avec le nombre de classes ...

La réponse RÉEL REAL est : CDA - Class Dependency Analyzer

Il est rapide, la mise à jour, facile à utiliser et fournit une représentation graphique des classes et 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) (pas besoin d'avoir un classpath complet)
L'option « Détecter les dépendances circulaires - ALT - C "fonctionne comme annonce et ne prend pas 100% du processeur pendant des heures pour analyser mes 468 classes.
Remarque: pour actualiser un espace de travail, vous devez l'ouvrir à nouveau (!), Afin de déclencher une nouvelle analyse de vos classes.

screenshot

+0

outil vraiment sympa. – 99Sono

3

Highwheel détecte la classe et des cycles de paquets et signale la source des dépendances jusqu'au niveau classe/procédé/domaine indiquant le type de la relation (héritage, la composition, la partie d'une signature de méthode, etc.) .

Il fractionne aussi les grands cycles en leurs sous-éléments qui peuvent être compris/attaqués individuellement.

https://github.com/hcoles/highwheel

La sortie est html avec svg intégré qui nécessite un navigateur moderne.

Questions connexes