6
votes

Détecter les dépendances cycliques avec Maven

Dans mon application, j'utilise une bibliothèque externe (Batik 1.7) composée de plusieurs modules. Les modules ont plusieurs dépendances cycliques entre eux. Cela n'influence pas la construction, mais certains outils (par exemple, le graphique de dépendance m2eclipse ou le rapport sur les dépendances) ne fonctionneront plus.

Y a-t-il un bon moyen de diagnostiquer quels cycles sont là et un moyen facile de se débarrasser d'eux?

mise à jour: Le problème est avec les POM, comme par exemple. Batik-Bridge < / code> dépend de batik-gvt , qui est à son tour dépend de Batik-Bridge .

Je pense que je peux résoudre cela en excluant certaines des dépendances manuellement, mais je ne sais pas quoi exclure. Ce que j'aimerais avoir est un aperçu clair des cycles du graphique.


3 commentaires

Si vous pouvez fournir un POM problématique, je suis sûr que M2eclipse et Maven Devs fourniront un correctif.


@Robert IMO, le problème est dans les pots de Batik, pas dans une POM.


Je vais essayer d'essayer - peut-être qu'ils peuvent fournir de meilleurs rapports d'erreur. Pour M2eclipse maintenant, vous devez examiner le journal des erreurs Eclipse pour savoir pourquoi cela ne fait rien. Et le plugin de dépendance continue de suspendre pendant des heures.


3 Réponses :


4
votes

Je ne suis pas sûr que cela soit associé à Maven (vous ne pouvez pas avoir de dépendances cycliques entre les modules avec Maven), mais peut-être que je n'ai pas eu quelque chose. Cela dit, vous pouvez utiliser JDePend pour analyser un code et trouver des dépendances cycliques (voir < Un href = "http://clarkware.com/software/jdepend.html#cycles" rel = "nofollow Noreferrer"> interprétation de cycles de dépendance ). Si vous préférez utiliser JDepend de Eclipse, il existe le JDePend4eclipse plugin.

Découvrez Batik de son référentiel de subversion , exécutez JDEPEND sur ses sources et voir si vous trouvez quelque chose (je suppose que vous allez). Mais, pour être honnête, c'était la partie facile. Se débarrasser des dépendances cycliques est une autre histoire et pourrait ne pas être aussi facile. Cela pourrait impliquer des tâches telles que les classes de déplacement d'un colis à un autre, reconditionner les modules, comprendre comment les travaux de construction de Batik (notez que son script de construction de fourmis dispose de 2220 lignes), etc. En d'autres termes, cela nécessitera un travail acharné sur une bibliothèque que vous Initialement vouloir simplement utiliser (et si vous ne contribuez que ces modifications, vous devrez peut-être les appliquer à nouveau avec une version ultérieure). Mon conseil: réfléchissez-y deux fois avant de commencer à creuser dans cette direction.

Juste pour vos informations, il y a aussi un jdepend-maven-plugin Ce qui n'est utile que si vous souhaitez exécuter JDepend sur votre projet (c'est-à-dire votre code) qui n'est pas votre demande.


0 commentaires

6
votes

Essayez d'exécuter ceci à partir de la ligne de commande à la racine de votre projet le plus haut: xxx


0 commentaires

2
votes

Essayez d'utiliser ucdetector Cela aide à trouver des cycles de dépendances en niveau de classe tout en développant. Un autre outil utile est Tattletale .

Cela vous fournit des rapports qui peuvent vous aider

  • Identifiez les dépendances entre les fichiers JAR
  • Trouvez des cours manquants de la classe de classe
  • Spot Si une classe est située dans plusieurs fichiers JAR
  • SPOT si le même fichier JAR est situé dans plusieurs emplacements
  • avec une liste de ce que chaque fichier JAR nécessite et fournit
  • Vérifiez la série SerialversionUid d'une classe
  • trouver des fichiers de jar similaires qui ont des numéros de version différents
  • Trouver des fichiers JAR sans numéro de version
  • localiser une classe dans un fichier jar
  • Obtenez le statut OSGI de votre projet
  • Supprimer l'utilisation de l'API classé noir

    J'ai intentionnellement parcouru des solutions mavennes pour ne pas doubler d'autres réponses.


0 commentaires