web-dev-qa-db-fra.com

Comment générer un graphique de la dépendance entre tous les modules d'un projet Maven?

Comment générer un graphique de la dépendance entre tous les modules d'un projet Maven (à l'exclusion des bibliothèques tierces telles que JUnit, SLF4J, etc.)? Je ne pouvais pas trouver un moyen d'inclure tous les modules dans un graphique en utilisant m2Eclipse. Merci.

47
Hai Minh Nguyen

Si la fonction Dependency Graph de m2Eclipse ne répond pas à vos besoins, jetez un coup d'œil au Maven Graph Plugin et en particulier à son graph:reactor goal.

UPDATE: la fonction Dependency Graph était supprimée dans m2Eclipse 1.0. Pour plus d'informations, voir: Maven POM-Editor: Le graphique de dépendance est manquant

27
Pascal Thivent

Une autre option est le plugin graphe de dépendance com.github.janssk1 maven . Ce plugin affiche les dépendances dans un fichier graphml qui peut être ouvert et édité dans un éditeur tel que yEd.

Pour générer le fichier graphml:

mvn com.github.janssk1:maven-dependencygraph-plugin:1.0:graph

Ce plugin ne fournit actuellement aucun mécanisme permettant d'exclure des dépendances tierces, AFAICT, mais elles peuvent être supprimées manuellement du graphique à l'aide de yEd ou via une feuille de style XSLT post-traitant les fichiers graphml. Voici une feuille de style simple qui supprimera les dépendances tierces (toute dépendance ne commençant pas par le paquet fourni par le paramètre "internal"):

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:gml="http://graphml.graphdrawing.org/xmlns/graphml"
    version="2.0">

  <xsl:output method="xml"/>
  <xsl:param name="internal"/>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="gml:node[not(starts-with(@id, $internal))]"/>

  <xsl:template match="gml:Edge[not(starts-with(@source, $internal)) or not(starts-with(@target, $internal))]"/>

</xsl:stylesheet>

Et exécutez-le via un processeur compatible XSLT 2.0 tel que Saxon:

saxon input.graphml exclude-third-party-deps.xsl internal="my.package" > input-internal.graphml
9
Raman

il existe exactement ce dont vous avez besoin, il s’appelle Pom Explorer.

Vous pouvez trouver le site ici: github.com/ltearno/pom-Explorer

C'est un outil pour travailler sur un graphique de projets Maven. En guise de teaser, je peux dire que sur ma machine, il analyse 4000 fichiers pom.xml en 4 secondes. Ensuite, de nombreuses fonctionnalités sont fournies au-dessus du graphique analysé:

  • analyse de dépendance (qui dépend de GAV, dont dépend ce transit, avec transitivité),
  • résolution (pom Explorer sait où sont les propriétés définies, il gère les dépendances et les bom imports),
  • manipulation (vous pouvez l'utiliser pour transformer votre pom graph, disons si vous voulez que de nombreux projets utilisent une nouvelle version d'une dépendance),
  • build (pom Explorer analyse votre pom graphe et sait dans quel ordre ils doivent être construits, puis il construit tout! il peut même surveiller les répertoires de vos projets pour connaître les modifications),
  • exportation (il existe aujourd'hui des exportations au format CSV et GRAPHML),
  • visualisation (pom Explorer peut vous montrer une visualisation interactive 3D personnalisable du graphique de vos projets).

Il est actuellement en développement actif, alors n'hésitez pas, essayez-le, signalez les bugs et demandez des fonctionnalités utiles! La documentation n'est pas encore complète, alors n'hésitez pas à demander!

Merci

6
Arnaud Tournier

Vérifiez également ce projet: https://github.com/roclas/pomParser

Cela crée un "graphe" assez cool qui peut être parcouru dans les deux sens (avant et arrière) ... L'idée est très simple, et vous pouvez télécharger et modifier le code très facilement.

5
Carlos

Plugin Maven Graph installé: http://mvnplugins.fusesource.org/maven/1.10/maven-graph-plugin/index.html , configuré de cette manière pour masquer les dépendances de tiers. A bien fonctionné.

 <profile>
  <id>graph</id>
  <pluginRepositories>
    <pluginRepository>
      <id>mvnplugins.fusesource.org</id>
      <url>http://mvnplugins.fusesource.org/repo/release</url>
      <releases>
        <enabled>true</enabled>
      </releases>
    </pluginRepository>
  </pluginRepositories>
  <build>
    <plugins>
      <plugin>
        <groupId>org.fusesource.mvnplugins</groupId>
        <artifactId>maven-graph-plugin</artifactId>
        <version>1.10</version>

        <configuration>
          <hideExternal>true</hideExternal>
        </configuration>

      </plugin>
    </plugins>
  </build>
</profile>
3
Yiling

N'as-tu pas ouvert le pom via Eclipse et jeté un coup d'œil sur les onglets du pom.xml où une entrée est nommée "Graphique de dépendance" ? Ah désolé ... quelque chose à surveiller ... Vous pouvez créer un arbre de dépendance via mvn dependency: tree sur la ligne de commande, mais cela ne produit aucune vue graphique. Une autre meilleure solution pourrait être le Plugin Maven Overview

2
khmarbaise

Cela pourrait suffire à certaines personnes:

Commande: mvn dependency: tree -Dincludes = com.yourpackage: *

0
brostbeef

J'ai aussi créé un outil pour cela. J'ai passé la journée à bidouiller, donc encore très expérimental =) Les tests et les contributions au code sont les bienvenues!

Je l’appelle Visualiseur de dépendances de référentiel Maven . Il ne montre pas seulement les dépendances, mais tous les artefacts impliqués.

Avec cette entrée:

Java -jar build/libs/maven-repository-dependency-visualizer-*-SNAPSHOT.jar \
-r http://repo1.maven.org/maven2 \
-fgs se.bjurr.violations \
-g se.bjurr.violations \
-a violation-comments-to-gitlab-gradle-plugin \
-v 1.9
  • Un référentiel, comme Nexus ou Artifactory.
  • Un ou plusieurs groupes à inclure.
  • Un groupe, artefact et version.

Il va générer un graphique montrant les relations entre tous les artefacts qui:

  • L'artéfact donné dépend de.
  • Dépend de l'artefact donné.
  • Comptez sur n'importe quel artefact dont dépend l'artefact donné.

 enter image description here

Il peut être utilisé pour:

  • Compréhension rapide du logiciel développé par une organisation.
  • Déterminez comment les conduites de distribution doivent être conçues.
  • Trouvez des dépendances étranges entre les artefacts.
  • Et beaucoup plus =)

Il est disponible sur GitHub .

0
Tomas Bjerre