Найти в Дзене
(java || kotlin) && devOps

Maven - неизведанные фичи. Ч. 2

Всем привет! Про фишки Maven, часть вторая. Поехали. 1) У maven, также как у Gradle, есть wrapper. Что это такое? Это по сути встроенный в проект maven. А точнее в проекте появляется .mvn\wrapper\maven-wrapper.jar, а также скачивается дистрибутив maven в папку локального репозитория .m2. Позволяет не зависеть от наличия и версии maven в системе. Установка: mvn wrapper:wrapper Использование: ./mvnw clean package вместо mvn clean package Добавленные при установке wrapper в проект файлы нужно закоммитить в git. https://maven.apache.org/wrapper/ 2) Maven daemon. Тоже перетекание хороших идей из Gradle. Как следует из названия это Maven, который запускается в фоновом режиме. Что позволяет убрать фазу инициализации maven при втором и последующих запусках и существенно ускорить сборку на маленьких проектах. К сожалению, это сторонний проект, поэтому не совместим с maven wrapper. https://github.com/apache/maven-mvnd 3) Maven умеет запускать сборку в несколько потоков. Рекомендуется сделать чис

Всем привет!

Про фишки Maven, часть вторая.

Поехали.

1) У maven, также как у Gradle, есть wrapper. Что это такое? Это по сути встроенный в проект maven. А точнее в проекте появляется .mvn\wrapper\maven-wrapper.jar, а также скачивается дистрибутив maven в папку локального репозитория .m2. Позволяет не зависеть от наличия и версии maven в системе.

Установка: mvn wrapper:wrapper

Использование: ./mvnw clean package вместо mvn clean package

Добавленные при установке wrapper в проект файлы нужно закоммитить в git.

https://maven.apache.org/wrapper/

2) Maven daemon. Тоже перетекание хороших идей из Gradle. Как следует из названия это Maven, который запускается в фоновом режиме. Что позволяет убрать фазу инициализации maven при втором и последующих запусках и существенно ускорить сборку на маленьких проектах. К сожалению, это сторонний проект, поэтому не совместим с maven wrapper.

https://github.com/apache/maven-mvnd

3) Maven умеет запускать сборку в несколько потоков. Рекомендуется сделать число потоков равное числу ядер процессора:

mvn -T 1C clean package

Но можно указать и конкретное число потоков:

mvn -T 4 clean package

И даже число потоков на ядро:

mvn -T 1.5C clean package

Список плагинов, которые могут работать параллельно и другую информацию можно найти здесь:

https://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3

Также эта настройка есть в IntelliJ IDEA.

Про настройки параллельного запуска для JUnit тестов можно почитать тут: https://www.baeldung.com/maven-junit-parallel-tests

4) Плагин Maven Enforсer. Позволяет при сборке на фазе validate проверять:

а) версию и вендора JDK

б) версию maven

в) отсутствие SNAPSHOT версий

г) наличие и отсутствие в проекте определенных файлов и их контрольную сумму

д) отсутствие repositories в pom файлах (они должны быть в settings.xml)

е) ОС, на которой запущен maven

и многое другое.

https://maven.apache.org/enforcer/enforcer-rules/index.html

5) BuildPlan плагин. Показывает какие плагины используются при сборке, какие goal связаны с каждой фазой. Запускать нужно с теми же ключами -D и -P,

с которыми проводится сборка:

mvn buildplan:list

http://buildplan.jcgay.fr/

#buildtool