Commandes utiles : Maven

Commandes utiles : Maven

Sommaire

Introduction

Une fois les phases classiques de Maven maîtrisées, la ligne de commande offre des outils beaucoup plus puissants pour expliquer un build, isoler un conflit de dépendances ou accélérer un projet multi-module.

Cette sélection se concentre volontairement sur des usages avancés ou très avancés. Toutes les commandes sont à exécuter depuis le répertoire contenant le fichier pom.xml, sauf indication contraire. Remplacez les noms de modules, de propriétés et d’artefacts par ceux de votre projet.

Liste de commandes

Précharger les dépendances pour travailler hors ligne

mvn dependency:go-offline

Résout à l’avance les dépendances, plugins et rapports nécessaires au build. Cette commande est particulièrement utile avant de créer une image de build destinée à fonctionner sans accès au réseau. Son efficacité dépend toutefois des profils et des plugins réellement activés lors du build final.

Afficher l’arbre des dépendances

mvn dependency:tree -Dverbose -Dincludes=org.slf4j:slf4j-api

Filtre l’arbre sur un artefact et affiche les dépendances omises lors de la résolution des conflits. Le filtre accepte la forme [groupId]:[artifactId]:[type]:[version] ainsi que les jokers *.

Pour exploiter le graphe avec un outil externe, le plugin peut aussi le produire au format DOT :

mvn dependency:tree -DoutputType=dot -DoutputFile=dependencies.dot

Détecter les dépendances inutilisées ou manquantes

mvn dependency:analyze

Signale les dépendances déclarées mais apparemment inutilisées, ainsi que celles utilisées sans être déclarées directement. Les résultats doivent être relus avec attention, car la réflexion et la génération de code peuvent produire des faux positifs.

Vérifier l’alignement avec dependencyManagement

mvn dependency:analyze-dep-mgt

Compare les versions réellement résolues avec celles déclarées dans dependencyManagement. Cette analyse aide à repérer une dépendance qui échappe au BOM ou à la politique de versions du projet.

Construire le classpath dans un fichier

mvn dependency:build-classpath -Dmdep.outputFile=classpath.txt

Écrit le classpath résolu dans un fichier. Cette sortie est pratique pour alimenter un outil externe, reproduire une exécution hors de Maven ou comparer précisément deux environnements.

Télécharger un artefact sans modifier le projet

mvn dependency:get -Dartifact=org.example:library:1.2.3 -Dtransitive=false

Télécharge un artefact précis dans le dépôt local, même s’il n’est pas déclaré dans le projet courant. Retirez -Dtransitive=false pour résoudre également ses dépendances transitives.

Purger un artefact défectueux du dépôt local

mvn dependency:purge-local-repository \
  -DmanualInclude=org.example:library \
  -DreResolve=false

Supprime uniquement l’artefact ciblé du dépôt local, sans effacer tout ~/.m2/repository. Cette commande est utile face à un téléchargement corrompu ; Maven récupérera de nouveau l’artefact au prochain build.

Afficher les profils actifs

mvn help:active-profiles

Liste les profils effectivement actifs et indique leur origine. Pratique lorsqu’un profil est activé par un fichier settings.xml ou par une propriété moins visible.

Afficher le POM effectif et l’origine de chaque valeur

mvn help:effective-pom -Dverbose

Affiche le POM réellement utilisé après l’héritage, l’activation des profils et l’application des valeurs par défaut. L’option -Dverbose ajoute des commentaires indiquant le fichier source de chaque élément : c’est souvent le moyen le plus rapide de retrouver une configuration héritée d’un parent.

Inspecter la configuration Maven effective

mvn help:effective-settings

Affiche la fusion des paramètres globaux et utilisateur, notamment les miroirs, profils et dépôts. Attention : la sortie peut contenir des informations sensibles et ne doit pas être publiée telle quelle.

Lire une propriété du projet

mvn help:evaluate -Dexpression=project.version -q -DforceStdout

Retourne uniquement la version effective du projet. En remplaçant project.version par une autre expression Maven, cette commande s’intègre facilement dans un script.

Obtenir l’aide détaillée d’un plugin

mvn help:describe -Dplugin=compiler -Ddetail

Décrit les objectifs et paramètres du plugin demandé. Ajoutez -Dgoal=compile pour limiter l’aide à un objectif particulier.

Rechercher les mises à jour sans modifier le POM

mvn versions:display-dependency-updates versions:display-plugin-updates

Liste les versions plus récentes disponibles pour les dépendances et les plugins. Ces objectifs sont informatifs : ils ne modifient pas le pom.xml.

Construire un module et ses dépendances

mvn -pl :api -am verify

Dans un projet multi-module, -pl :api sélectionne le module par son artifactId et -am ajoute les modules dont il dépend. Pour construire au contraire les modules qui dépendent de api, utilisez -amd. Les deux options peuvent être combinées.

Reprendre un build multi-module après un échec

mvn -rf :api verify

Reprend le reactor Maven à partir du module dont l’artifactId est api. Cette option est particulièrement utile après l’échec d’un build long.

Continuer le reactor pour regrouper les erreurs

mvn --fail-at-end verify

Poursuit les modules indépendants après un échec et reporte toutes les erreurs à la fin. Dans un gros reactor ou en CI, cette stratégie évite de relancer plusieurs fois le build pour découvrir les problèmes un par un.

Paralléliser le build

mvn -T 1C clean verify

Utilise un thread par cœur processeur pour construire les modules qui peuvent l’être en parallèle. Le gain dépend de la structure du projet et de la compatibilité des plugins avec l’exécution concurrente.

Afficher les informations de débogage

mvn -X verify

Active les traces détaillées de Maven. La sortie est très volumineuse, mais précieuse pour diagnostiquer la résolution d’une dépendance, un plugin ou l’activation inattendue d’un profil.

Produire des logs stables pour la CI

mvn --batch-mode --no-transfer-progress -Dstyle.color=never verify

Désactive les interactions, les barres de progression des téléchargements et les couleurs. Les journaux deviennent plus lisibles, plus compacts et plus faciles à analyser automatiquement.

Conclusion

Les commandes les plus rentables ne lancent pas seulement le build : elles rendent visible ce que Maven a calculé. help:effective-pom, help:evaluate et dependency:tree expliquent la configuration et la résolution ; les options du reactor permettent ensuite de limiter précisément le travail à effectuer.

Dans un projet qui fournit le Maven Wrapper, remplacez simplement mvn par ./mvnw. Vous utiliserez ainsi la version de Maven prévue par le projet et rendrez les builds plus reproductibles, aussi bien en local que dans l’intégration continue.

Tags :
Partager :