web-dev-qa-db-fra.com

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

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

197
shaunthomas999

Ces fichiers proviennent de wrapper Maven . Cela fonctionne de la même manière que wrapper Gradle .

Cela vous permet d'exécuter le projet Maven sans que Maven soit installé et présent sur le chemin. Il télécharge la version correcte de Maven si elle n’est pas trouvée (pour autant que je sache par défaut dans votre répertoire d’accueil utilisateur).

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


Pour créer ou mettre à jour tous les fichiers Maven Wrapper nécessaires, 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 maven sur PATH (ajoutez le chemin d'accès à maven bin à Path sur les variables système) si vous avez déjà mvnw dans votre projet, vous pouvez utiliser ./mvnw au lieu de mvn dans les commandes.

278
Dodge

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

L'URL avec Maven est spécifié dans chaque projet sous .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 modifier la version de Maven, appelez ce qui suit (rappelez-vous de --non-recursive pour les projets multi-modules):

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

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

Pour générer un wrapper à partir de zéro avec Maven (vous devez déjà l'avoir dans PATH run:

mvn io.takari:maven:wrapper -Dmaven=3.3.9 
25
Michal Kordas

De loin, la meilleure option à l’heure actuelle serait d’utiliser un conteneur Maven comme outil de construction. Un script mvn.sh comme celui-ci suffirait:

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