What is the purpose of mvnw and mvnw.cmd files?

前端 未结 4 1916
余生分开走
余生分开走 2020-12-12 08:50

When I created a Spring Boot application I could see mvnw and mvnw.cmd files in the root of the project. What is the purpose of these two files?

相关标签:
4条回答
  • 2020-12-12 09:01

    The Maven Wrapper is an excellent choice for projects that need a specific version of Maven (or for users that don't want to install Maven at all). Instead of installing many versions of it in the operating system, we can just use the project-specific wrapper script.

    mvnw: it's an executable Unix shell script used in place of a fully installed Maven

    mvnw.cmd: it's for Windows environment


    Use Cases

    The wrapper should work with different operating systems such as:

    • Linux
    • OSX
    • Windows
    • Solaris

    After that, we can run our goals like this for the Unix system:

    ./mvnw clean install
    

    And the following command for Batch:

    ./mvnw.cmd clean install
    

    If we don't have the specified Maven in the wrapper properties, it'll be downloaded and installed in the folder $USER_HOME/.m2/wrapper/dists of the system.


    Maven Wrapper plugin

    Maven Wrapper plugin to make auto installation in a simple Spring Boot project.

    First, we need to go in the main folder of the project and run this command:

    mvn -N io.takari:maven:wrapper
    

    We can also specify the version of Maven:

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

    The option -N means –non-recursive so that the wrapper will only be applied to the main project of the current directory, not in any submodules.

    0 讨论(0)
  • 2020-12-12 09:07

    These files are from Maven wrapper. It works similarly to the Gradle wrapper.

    This allows you to run the Maven project without having Maven installed and present on the path. It downloads the correct Maven version if it's not found (as far as I know by default in your user home directory).

    The mvnw file is for Linux (bash) and the mvnw.cmd is for the Windows environment.


    To create or update all necessary Maven Wrapper files execute the following command:

    mvn -N io.takari:maven:wrapper
    

    To use a different version of maven you can specify the version as follows:

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

    Both commands require maven on PATH (add the path to maven bin to Path on System Variables) if you already have mvnw in your project you can use ./mvnw instead of mvn in the commands.

    0 讨论(0)
  • 2020-12-12 09:18

    Command mvnw uses Maven that is by default downloaded to ~/.m2/wrapper on the first use.

    URL with Maven is specified in each project at .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
    

    To update or change Maven version invoke the following (remember about --non-recursive for multi-module projects):

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

    or just modify .mvn/wrapper/maven-wrapper.properties manually.

    To generate wrapper from scratch using Maven (you need to have it already in PATH run:

    mvn io.takari:maven:wrapper -Dmaven=3.3.9 
    
    0 讨论(0)
  • 2020-12-12 09:18

    By far the best option nowadays would be using a maven container as a builder tool. A mvn.sh script like this would be enough:

    #!/bin/bash
    docker run --rm -ti \
     -v $(pwd):/opt/app \
     -w /opt/app \
     -e TERM=xterm \
     -v $HOME/.m2:/root/.m2 \
     maven mvn "$@"
    
    0 讨论(0)
提交回复
热议问题