Maven: настроить параллельную сборку в pom.xml

Maven имеет возможность выполнять параллельные сборки: https://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3

mvn -T 4 clean install # Builds with 4 threads
mvn -T 1C clean install # 1 thread per cpu core
mvn -T 1.5C clean install # 1.5 thread per cpu core

Можно ли указать эти аргументы в pom.xml или settings.xml? Повторение этих параметров может быть раздражающим.

Ответ 1

Это решение немного взломано, но сработало для меня. Он включает указание новой переменной среды, присвоение ей значения -T3 и добавление этой переменной в сценарий запуска Maven.

Для Windows (Linux в паренсе):

  1. Откройте окно Переменные среды: Компьютер → Свойства → Расширенные настройки системы → Переменные среды
  2. Добавьте свойство MAVEN_CMD_LINE_OPTS с желаемым значением. В моем случае -T 3, поскольку я хочу, чтобы Maven использовал 3 потока для параллельного построения.
  3. Отредактируйте файл mvn.cmd (В Linux: файл mvn). Найдите часть, где фактически выполняется команда Java, строка начинается с% MAVEN_JAVA_EXE% (В Linux: обычно после строки, определяющей основной класс: org.codehaus.plexus.classworlds.launcher.Launcher)

  4. Добавьте% MAVEN_CMD_LINE_OPTS% в конец строки (в Linux: $ MAVEN_CMD_LINE_OPTS)

Когда вы запустите mvn compile для проекта Maven, вы увидите следующую строку:

Использование реализации MultiThreadedBuilder с числом потоков 3

Преимущество в том, что пользователь может "переопределить" это значение. Таким образом, если пользователь выполняет компиляцию mvn -T4, то вместо 4 по умолчанию используются 4 потока.

Примечание:

  1. Я пробовал это на Maven 3.3.9, но концепция должна работать на любом Maven версия.
  2. Многопоточные сборки могут страдать от проблем, когда плагины особенно пользовательские плагины не безопасны для потоков. Так что используйте с осторожностью и рассмотрите возможность отключения этого как исправление в случае проблем.

Ответ 2

Я не мог найти способ настроить это в pom.xml или settings.xml. Есть хорошее решение для систем unix, отредактируйте свой.bashrc и добавьте псевдоним.

alias mvnp='mvn -T 4'

теперь с терминала maven с помощью mvnp

mvnp clean install

Ответ 3

Вы можете указать опцию в MAVEN_OPTS переменной окружения (см http://maven.apache.org/guides/mini/guide-configuring-maven.html). Как только это будет сделано, вам не придется повторять это. Настройка переменной среды зависит от вашей системы. Однако это повлияет на все запуски maven в вашей среде. Возможно, вы можете включить разные среды, так что только проект, который вы на самом деле хотите построить параллельно, работает в такой среде.