218 votes

Quel est le but des fichiers mvnw et mvnw.cmd ?

Lorsque j'ai créé une application Spring Boot, j'ai pu voir les fichiers mvnw et mvnw.cmd à la racine du projet. Quel est l'objectif de ces deux fichiers ?

302voto

Dodge Points 4284

Ces fichiers proviennent du Maven wrapper. Il fonctionne de manière similaire au Gradle wrapper.

Cela vous permet d'exécuter le projet Maven sans avoir Maven installé et présent dans le chemin. Il télécharge la version correcte de Maven si elle n'est pas trouvée (à ma connaissance, par défaut dans le répertoire de votre utilisateur).

Le fichier mvnw est pour Linux (bash) et le fichier mvnw.cmd est pour l'environnement Windows.


Pour créer ou mettre à jour tous les fichiers nécessaires du Maven Wrapper, exécutez la commande suivante :

mvn -N io.takari:maven:wrapper

Pour utiliser une version différente de Maven, vous pouvez spécifier la version comme suit :

mvn -N io.takari:maven:wrapper -Dmaven=3.3.3

Les deux commandes nécessitent que Maven soit sur le PATH. Si vous avez déjà mvnw dans votre projet, vous pouvez utiliser ./mvnw au lieu de mvn dans les commandes.

26voto

Michal Kordas Points 4767

La commande mvnw utilise Maven qui est téléchargé par défaut dans ~/.m2/wrapper lors de la première utilisation.

L'URL avec Maven est spécifiée dans chaque projet à .mvn/wrapper/maven-wrapper.properties:

distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip

Pour mettre à jour ou changer la version de Maven, invoquez la commande suivante (n'oubliez pas --non-recursive pour les projets multi-modules) :

./mvnw io.takari:maven:wrapper -Dmaven=3.3.9 

ou modifiez simplement .mvn/wrapper/maven-wrapper.properties manuellement.

Pour générer un wrapper à partir de zéro en utilisant Maven (vous devez déjà l'avoir dans PATH), exécutez :

mvn io.takari:maven:wrapper -Dmaven=3.3.9

3voto

André Points 39

De loin, la meilleure option de nos jours serait d'utiliser un conteneur Maven comme outil de construction. Un script mvn.sh comme celui-ci serait suffisant :

#!/bin/bash
docker run --rm -ti \
 -v $(pwd):/opt/app \
 -w /opt/app \
 -e TERM=xterm \
 -v $HOME/.m2:/root/.m2 \
 maven mvn "$@"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X