Яка мета файлів mvnw та mvnw.cmd?


257

Коли я створив додаток Spring Boot, я міг бачити mvnwта mvnw.cmdфайли в корені проекту. Яка мета цих двох файлів?

Відповіді:


345

Ці файли з обгортки Maven . Він працює аналогічно обгортці Gradle .

Це дозволяє запустити проект Maven без встановлення Maven та присутності на шляху. Він завантажує правильну версію Maven, якщо її не знайдено (наскільки я знаю за замовчуванням у домашньому каталозі вашого користувача).

mvnwФайл для Linux (Баш) і mvnw.cmdдля навколишнього середовища Windows.


Для створення або оновлення всіх необхідних файлів Maven Wrapper виконайте таку команду:

mvn -N io.takari:maven:wrapper

Для використання іншої версії maven ви можете вказати її наступним чином:

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

Для обох команд потрібен maven on PATH(додайте шлях до maven binдо Pathсистемних змінних), якщо у вашому проекті вже є mvnw, ви можете використовувати ./mvnwзамість mvnцих команд.


Ваша відповідь дуже корисна. Я перевіряю документацію для обгортки Maven. Я використовував mvnкоманду для операції Maven, хоча міг використовувати ./mvnwдля тих же цілей.
shaunthomas999

2
Дякую за відповідь. Чи можете ви пояснити, коли це створюється, як це відбувається, коли ви спочатку створюєте проект? Чи оновиться оновлення по лінії, коли ви внесете зміни до своєї пам’яті, як-от додати видалити залежності / плагіни?
Асанкке

1
і, чи слід додавати / вводити файли mvnw.cmd?
jpganz18

так, звісно. це дозволяє швидко запустити Maven build без необхідності додаткового встановлення Maven або встановлення його на PATH.
Додж

1
Отож, велике спасибі за відповідь, це дуже корисно ¿Чи можете ви сказати нам щось про переносимість файлів налаштувань Maven, коли ми працюємо таким чином? Салюдо і ще раз дякую.
Даніель Ернандес

26

Команда 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запущеною:

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

5

Maven Wrapper є відмінним вибором для проектів , які потребують конкретної версії Maven (або для користувачів , які не хочуть , щоб встановити Maven на всіх). Замість того, щоб встановлювати багато його версій в операційній системі, ми можемо просто використовувати сценарій обгортки, що відповідає проекту.

mvnw: це виконуваний скрипт оболонки Unix, який використовується замість повністю встановленого Maven

mvnw.cmd : це для середовища Windows


Використовуйте випадки

Обгортка повинна працювати з різними операційними системами, такими як:

  • Linux
  • OSX
  • Windows
  • Соляріс

Після цього ми можемо виконати наші цілі для системи Unix:

./mvnw clean install

І наступна команда для Batch:

./mvnw.cmd clean install

Якщо у властивості обгортки у нас немає вказаного Maven, він буде завантажений та встановлений у папці $USER_HOME/.m2/wrapper/distsсистеми.


Плагін Maven Wrapper

Плагін Maven Wrapper для автоматичної установки у простому проекті Spring Boot.

Спочатку нам потрібно зайти в головну папку проекту і виконати цю команду:

mvn -N io.takari:maven:wrapper

Ми також можемо вказати версію Maven:

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

Параметр -N означає –нерекурсивний, так що обгортка буде застосована лише до основного проекту поточного каталогу, а не до будь-яких підмодулів.


2

На сьогоднішній день найкращим варіантом на сьогодні було б використання контейнера 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 "$@"

7
Це не відповідає на питання ОП, воно просто пропонує альтернативу
ahmedjaad

2
Сама основна ідея обгортки Maven - оголосити правильну версію maven для цього проекту. І бонусом є уникнення необхідності встановити Maven вручну. Ваш підхід не тільки не вистачає для вирішення проблеми з версією, але вимагає ще одного локально встановленого інструменту.
Макс

2
Також зауважте, що це змонтує користувачі власного локального сховища Maven в екземплярі docker. Зазвичай він працює як root, тому все, що написано докерізованим екземпляром maven, належить root під Linux. Це не обов’язково бажано. Я виявив, що належним чином встановлений екземпляр Nexus, доступний для екземпляра збірки докер, був менш болісним, особливо якщо ви хочете відтворювати збірки.
Thorbjørn Ravn Andersen

Це було давно, але я все одно віддаю перевагу цьому способу. Щодо версії Maven, теги зображень надають це (просто подивіться на сторінку Maven у Docker Hub). Що стосується права власності на root, то воно просто не відбувається на робочому столі докера, але дійсно відбувається в полях Linux (і, звичайно, вузли побудови). Невеликий трюк може "примусити" поточний UID в цьому випадку (аргумент -u), тому проблема вирішується. Але все означає, що я вважаю, що цей підхід на порядок краще. Докер все одно є всюди, особливо на вузлах збірки.
Андре

1
(продовження) Налаштування Дженкінса у старій школі та налаштування мислення ведуть до подібних речей. Сучасні інструменти CI / CD роблять навпаки: ви просто вибираєте контейнер для складання. Але це лише моя думка.
Андре
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.