¿Cuál es el propósito de mvnw y mvnw.cmd archivos?


Cuando creé una aplicación de Spring Boot pude ver los archivos mvnw y mvnw.cmd en la raíz del proyecto. ¿Cuál es el propósito de estos dos archivos?

Author: kryger, 2016-08-02

3 answers

Estos archivos son de Maven wrapper. Funciona de manera similar a Gradle wrapper.

Esto le permite ejecutar el proyecto Maven sin tener Maven instalado y presente en la ruta. Descarga la versión correcta de Maven si no se encuentra (por lo que sé, por defecto en su directorio personal de usuario).

El archivo mvnw es para Linux (bash) y el mvnw.cmd es para el entorno Windows.


Para crear o actualizar todos los archivos Wrapper necesarios de Maven ejecute el siguiente comando:

mvn -N io.takari:maven:wrapper

Para usar una versión diferente de maven puede especificar la versión de la siguiente manera:

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

Ambos comandos requieren maven en PATH, si ya tiene mvnw en su proyecto puede usar ./mvnw en lugar de mvn en los comandos.

 189
Author: Dodge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-21 16:24:08

El comando mvnw utiliza Maven que se descarga por defecto en ~/.m2/wrapper en el primer uso.

URL con Maven se especifica en cada proyecto en .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

Para actualizar o cambiar la versión de Maven, invoque lo siguiente (recuerde acerca de --non-recursive para proyectos de módulos múltiples):

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

O simplemente modificar .mvn/wrapper/maven-wrapper.properties manualmente.

Para generar wrapper desde cero usando Maven (necesitas tenerlo ya en PATH ejecutar:

mvn io.takari:maven:wrapper -Dmaven=3.3.9 
 14
Author: Michal Kordas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-20 08:27:56

La mejor opción hoy en día sería usar un contenedor maven como herramienta de construcción. Un script mvn.sh como este sería suficiente:

#!/bin/bash
docker run --rm -ti \
 -v $(pwd):/opt/app \
 -w /opt/app \
 -e TERM=xterm \
 -v $HOME/.m2:/root/.m2 \
 maven mvn "$@"
 1
Author: André,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-16 20:56:09