web-dev-qa-db-fra.com

Comment obtenir les dépendances Maven imprimées dans un fichier dans un format lisible?

Je travaille sur un gros projet avec de nombreux fichiers pom.xml et j'ai besoin de spécifier toutes les bibliothèques que j'utilise. Cela signifie que je dois lire les fichiers pom.xml de manière récursive et obtenir groupId, artifactId, scope et version. J'ai vérifié la dépendance mvn: tree mais je ne trouve pas de moyen de l'imprimer dans un fichier dans un format lisible. J'ai vu appendOutput mais je n'ai vu aucun exemple sur la façon de l'utiliser en cmd. J'ai vu quelques solutions faites sous Linux mais je n'ai accès qu'à Windows XP.

31
why_vincent

Cela peut (au moins maintenant) être fait avec des options de ligne de commande pour le plugin dependency: tree.

Essayer:

mvn dependency:tree -Doutput=/path/to/file

Référence: Page du plug-in de dépendance Maven

Vous avez uniquement posé des questions sur le format "lisible", mais vous pouvez également passer le paramètre -DoutputType avec diverses options. Notez également que la version que j'ai installée, j'obtiens l'avertissement suivant:

[WARNING] The parameter output is deprecated. Use outputFile instead. 

Alors, pensez à l'essayer avec -DoutputFile =/path/to/file

De plus, je n'ai pas pu obtenir le paramètre -DoutputType pour me donner autre chose que le texte par défaut, mais je n'ai pas eu l'occasion de jouer avec. YMMV.

65
AC Capehart

Ajout du

<plugin>
    <groupId>org.Apache.servicemix.tooling</groupId>
    <artifactId>depends-maven-plugin</artifactId>
</plugin>

le plugin produit un classes/META-INF/maven/dependencies.properties fichier avec les dépendances du projet facilement analysable.

Exemple de sortie produite:

# Project dependencies generated by the Apache ServiceMix Maven Plugin
# Generated at: Mon Oct 10 17:43:00 CEST 2011

groupId = my.group.name
artifactId = my.artifact.name
version = 0.0.1-SNAPSHOT
my.group.name/my.artifact.name/version = 0.0.1-SNAPSHOT

# dependencies

junit/junit/version = 4.8
junit/junit/type = jar
junit/junit/scope = test

org.easymock/easymock/version = 2.4
org.easymock/easymock/type = jar
org.easymock/easymock/scope = test
4
Luca Geretti

Sur GNU/Linux, je ferais simplement mvn dependency:tree > myFile. Cependant, si vous êtes limité à Windows uniquement, je rechercherais la syntaxe de Windows pour diffuser la sortie d'une commande.

Selon ce site (juste un top-résultats de Google), il semble que la console de Windows utilise également > signe pour diriger le flux de sortie vers un fichier. Pourriez-vous essayer cela?

4
Piotr Nowicki

Si vous avez plusieurs modules sous le même repo/projet et que vous voulez les dépendances de tous les modules dans un fichier, afin de pouvoir différencier n/b une construction et une autre pour voir si quelque chose a changé quelque part, vous pouvez faire

$project_dir> mvn dependency:tree -DoutputFile=<absolute_path_to_file> -DappendOutput=true

par exemple.

$project_dir> mvn dependency:tree -DoutputFile=`pwd`/mvn_dependency_tree.txt -DappendOutput=true

Voir les autres options disponibles sur https://maven.Apache.org/plugins/maven-dependency-plugin/tree-mojo.html

3
Anand Ganesh

effective-pom (en conjonction avec certaines commandes linux pour enregistrer le fichier) peut être suffisant pour vos besoins.

0
smp7d

Vous pouvez toujours installer MinGW et MSYS puis utiliser les exemples Linux en utilisant dependency:tree sous Windows

0
Wilhelm Kleu