Подтвердить что ты не робот

Использование профилей maven для управления выполнением сборки

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

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

Правильно ли это сделать условное выполнение в maven?

Какой "правильный" способ сделать это в maven?

4b9b3361

Ответ 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 и т.д.