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?

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

    Cela vous permet d’exécuter le projet Maven sans que Maven ne 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 personnel).

    Le fichier mvnw est pour Linux (bash) et le mvnw.cmd est pour 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 requièrent maven sur PATH , si vous avez déjà mvnw dans votre projet, vous pouvez utiliser ./mvnw au lieu de mvn dans les commandes.

    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 à l’ .mvn/wrapper/maven-wrapper.properties :

     dissortingbutionUrl=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 (souvenez --non-recursive vous de --non-recursive pour les projets multi-modules):

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

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

    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 

    De nos jours, la meilleure option serait d’utiliser un conteneur Maven comme outil de création. 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 "$@"