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

5 minutos de lectura

avatar de usuario de shaunthomas999
shaunthomas999

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

Avatar de usuario de Dodge
Esquivar

Estos archivos son de Envoltorio experto. Funciona de manera similar a la envoltorio gradle.

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 (que yo sepa, por defecto en el directorio de inicio de su usuario).

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


Para crear o actualizar todos los archivos Maven Wrapper necesarios, 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 (agregue la ruta a maven bin a Path en Variables del sistema) si ya tiene mvnw en su proyecto, puede usar ./mvnw en lugar de mvn en los comandos.

  • Gracias por la respuesta. ¿Puedes explicar cuándo se genera esto, como cuando creas inicialmente un proyecto? ¿Se actualizará a lo largo de la línea cuando realice cambios en su pom como agregar, eliminar dependencias/complementos?

    – Asanke

    20/09/2017 a las 23:20

  • y, ¿debería agregar/confirmar los archivos mvnw.cmd?

    – jpganz18

    15 de enero de 2019 a las 3:26

  • sí, claro. le permite ejecutar rápidamente su compilación maven sin la necesidad de instalar maven adicional o tenerlo en PATH.

    – Esquivar

    15 de enero de 2019 a las 19:04

  • Muchas gracias por la respuesta, es muy útil. ¿Podría decirnos algo sobre la portabilidad de los archivos de configuración de maven cuando trabajamos de esa manera? Saludos y gracias de nuevo.

    –Daniel Hernandez

    13 de septiembre de 2019 a las 4:49


  • @DanielHernández, el contenedor maven usa la configuración predeterminada.xml en el sistema de los usuarios. y de acuerdo a esto asunto hay algunos trucos sobre cómo podría agregar una configuración personalizada.xml al repositorio, pero parece que ignora la configuración del usuario en el sistema.

    – Esquivar

    13 de septiembre de 2019 a las 6:30

Avatar de usuario de Michal Kordas
michal kordas

Dominio mvnw utiliza Maven que se descarga de forma predeterminada en ~/.m2/wrapper en el primer uso.

La 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 sobre --non-recursive para proyectos de varios módulos):

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

o simplemente modificar .mvn/wrapper/maven-wrapper.properties a mano.

Para generar un contenedor desde cero usando Maven (debe tenerlo ya en PATH correr:

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

Avatar de usuario de Romil Patel
Romil Patel

El Envoltorio experto es una excelente opción para proyectos que necesitan una versión específica de Maven (o para usuarios que no desean instalar Maven). En lugar de instalar muchas versiones en el sistema operativo, podemos usar el script contenedor específico del proyecto.

mvnw: es un script de shell de Unix ejecutable que se usa en lugar de un Maven completamente instalado

mvnw.cmd: es para el entorno de Windows


Casos de uso

El contenedor debe funcionar con diferentes sistemas operativos, tales como:

  • linux
  • OSX
  • ventanas
  • Solaris

Después de eso, podemos ejecutar nuestros objetivos así para el sistema Unix:

./mvnw clean install

Y el siguiente comando para Batch:

./mvnw.cmd clean install

Si no tenemos el Maven especificado en las propiedades del contenedor, se descargará e instalará en la carpeta $USER_HOME/.m2/wrapper/dists del sistema.


Complemento de envoltura de Maven

Complemento de envoltura de Maven para realizar la instalación automática en un proyecto Spring Boot simple.

Primero, debemos ir a la carpeta principal del proyecto y ejecutar este comando:

mvn -N io.takari:maven:wrapper

También podemos especificar la versión de Maven:

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

La opción -N significa -no recursivo, por lo que el contenedor solo se aplicará al proyecto principal del directorio actual, no a ningún submódulo.


Fuente 1 (lectura adicional): https://www.baeldung.com/maven-wrapper

  • Tal vez debería mencionar que parte del texto está extraído de baeldung.com/maven-wrapper

    – PhoneixS

    15 de septiembre de 2020 a las 11:20

respuesta corta: para ejecutar Maven y Gradle en la terminal sin seguir los procesos de instalación manual.

ejemplo gradle:

./gradlew clean build
./gradlew bootRun

ejemplo experto:

./mvnw clean install
./mvnw spring-boot:run

El La forma recomendada de ejecutar cualquier compilación de Gradle es con la ayuda de Gradle Wrapper (en resumen, simplemente “Envoltura”). El Wrapper es un script que invoca una versión declarada de Gradle, descargándola previamente si es necesario. Como resultado, los desarrolladores pueden ponerse en marcha con un proyecto de Gradle rápidamente sin tener que seguir los procesos de instalación manual. ahorrando tiempo y dinero a su empresa.

Gradle también agregaría algunos archivos específicos correspondientes a los archivos de Maven Gradlew y Gradle.bat

Inicializador

Avatar de usuario de Lova Chittumuri
Lova Chittumuri

En el sistema operativo Windows, mvnw clean install se utiliza para la actividad maven clean and install, y mvnw spring-boot:run se utiliza para ejecutar la aplicación de arranque Spring desde el símbolo del sistema.

Por ejemplo:

C:\SamplesSpringBoot\demo>mvnw clean install
C:\SamplesSpringBoot\demo>mvnw spring-boot:run

Avatar de usuario de André
André

Con mucho, la mejor opción hoy en día sería usar un contenedor maven como herramienta de construcción. A mvn.sh script 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 "$@"

¿Ha sido útil esta solución?