Использование профилей maven для управления выполнением сборки
Мне нужно изменить сборку maven для большого проекта, чтобы пропустить определенные шаги во время типичных сборок разработки (т.е. не создавать файлы * -source.jar). Я искал "условное исполнение" для maven, но ничего не нашел.
Профиль dev звучит как интуитивно понятный способ сделать это, но я не знаю, как интуитивно понятный maven. Документы для профилей показывают, как устанавливать различные свойства (например, параметры подключения базы данных) для разных профилей. Я предполагаю, что могу установить свойство, а затем проверить, установлено ли это свойство в теге maven-source-plugin - execute - execute.
Правильно ли это сделать условное выполнение в maven?
Какой "правильный" способ сделать это в maven?
Ответы
Ответ 1
Вы думаете об этом немного назад: включите профиль, не отключите его. Это именно то, какие профили лучше всего подходят, и это именно ваш случай: вам нужно только, чтобы шаги выполнялись при определенных обстоятельствах. Таким образом, у вас может быть что-то вроде:
<profile>
<id>source-jars</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
...
И на самом деле есть пример, подобный этому на странице использования maven-source-plugin. Когда вам нужно создать свой артефакт, используйте mvn -p source-jars (или что-то еще). Это! Если вам нужно сделать это только во время релиза, плагин выпускает даже способ определения профилей, которые нужно использовать прямо в конфигурации плагина выпуска.
Ответ 2
Вы можете достичь своей фактической цели по включению плагина source-jars по умолчанию, добавив два профиля в ваш POM. В документации Maven отмечается, что вы можете добавить элемент <activeByDefault>true</activeByDefault>
в раздел activation
и заявить, что
Этот профиль будет автоматически активен для всех сборок, если другой профиль в том же POM не активирован с использованием одного из ранее описанных методов
Итак, вы можете добавить два профиля, один из которых - activeByDefault
, который включает соответствующий плагин, и другой, который может быть активирован любым из стандартных способов (например, -P
из командной строки) до запретить запуск профиля по умолчанию. Следовательно, раздел profiles
в вашем pom.xml
(или настройках Maven или любом другом) может выглядеть следующим образом:
<profile>
<id>source-jars</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
...
</plugin>
</plugins>
</build>
</profile>
<profile>
<!-- active this profile to disable the source-jars plugin -->
<id>no-optional-plugins</id>
</profile>
К сожалению, я не вижу способа, чтобы этот метод хорошо масштабировался для управления несколькими плагинами - я думаю, вам нужны профили O(n^2)
для плагинов n
, но для этого простого случая он должен работать нормально.
Другой возможный более простой вариант с Maven ≥ 2.0.10 состоит в том, чтобы просто иметь профиль source-jars
сверху (еще activeByDefault
) и вручную деактивировать профиль, если хотите, префикс идентификатора профиля с помощью -
или !
после -P
CLI:
$ mvn -P !source-jars
Этот метод не имеет проблем с O(n^2)
с несколькими плагинами, но он также менее гибкий, поскольку деактивация не может быть вызвана системным свойством, переменной среды, версией JDK и т.д.