Использование maven профилей для управления выполнением сборки - PullRequest
31 голосов
/ 13 января 2011

Мне нужно изменить сборку maven для большого проекта, чтобы пропустить определенные шаги во время типичных сборок разработки (т.е. не собирать файлы * -source.jar).Я искал "условное выполнение" для maven, но ничего не нашел.

Профиль разработчика звучит как интуитивный способ сделать это - но я не знаю, насколько интуитивно понятен maven.Документы для профилей показывают, как установить разные свойства (например, параметры подключения к базе данных) для разных профилей.Я полагаю, я мог бы установить свойство и затем проверить, установлено ли это свойство в теге maven-source-plugin - executeings - execute.

Это правильный способ выполнения условного выполнения в maven?1006 * Каков «правильный» способ сделать это в Maven?

Ответы [ 2 ]

36 голосов
/ 14 января 2011

Вы думаете об этом немного задом наперед: профиль включает поведение, а не отключает его. Это именно то, что профили лучше всего, и это именно ваш случай: вы хотите, чтобы шаги выполнялись только при определенных обстоятельствах. Так что у вас может быть что-то вроде:

<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 (или любой другой). Это оно! Если вам нужно сделать это только во время выпуска, плагин release даже предлагает способ определения профилей для использования прямо в конфигурации плагина релиза.

8 голосов
/ 23 октября 2014

Вы можете достичь своей реальной цели, включив плагин 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) и до вручную отключите профиль , если хотите, добавив префикс ID к - или ! после -P флаг CLI:

$ mvn -P !source-jars

Этот метод не имеет таких же проблем O(n^2) с несколькими плагинами, но он также менее гибок, поскольку деактивация не может быть вызвана системным свойством, переменной среды, версией JDK и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...