Какова цель файлов mvnw и mvnw.cmd?

Когда я создал приложение загрузки Spring, я мог видеть файлы mvnw и mvnw.cmd в корне проекта. Какова цель этих двух файлов?

Ответ 1

Эти файлы из оболочки Maven. Он работает аналогично оболочке Gradle.

Это позволяет запускать проект Maven без установки и представления Maven в пути. Он загружает правильную версию Maven, если он не найден (насколько я знаю по умолчанию в вашем домашнем каталоге пользователя).

Файл mvnw предназначен для Linux (bash), а mvnw.cmd - для среды Windows.


Для создания или обновления всех необходимых файлов Maven Wrapper выполните следующую команду:

mvn -N io.takari:maven:wrapper

Чтобы использовать другую версию maven, вы можете указать версию следующим образом:

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

Обе команды требуют maven для PATH (добавьте путь к maven bin в Path для системных переменных), если в вашем проекте уже есть mvnw, вы можете использовать ./mvnw вместо mvn в командах.

Ответ 2

Команда mvnw использует Maven, который по умолчанию загружается в ~/.m2/wrapper при первом использовании.

URL с Maven указан в каждом проекте в .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

Чтобы обновить или изменить версию Maven, вызовите следующее (помните о --non-recursive для многомодульных проектов):

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

или просто изменить .mvn/wrapper/maven-wrapper.properties вручную.

Чтобы создать оболочку с нуля с помощью Maven (вам нужно иметь ее уже в PATH run:

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

Ответ 3

Безусловно, лучшим вариантом в настоящее время является использование контейнера maven в качестве инструмента для сборки. mvn.sh как это было бы достаточно:

#!/bin/bash
docker run --rm -ti \
 -v $(pwd):/opt/app \
 -w /opt/app \
 -e TERM=xterm \
 -v $HOME/.m2:/root/.m2 \
 maven mvn "[email protected]"