5

Я пытаюсь использовать расширение gitflow-helper-maven-plugin для своих сборщиков maven.Как включить профиль maven, когда встроенная версия не является -SNAPSHOT?

Поэтому я хотел бы настроить мой проект, чтобы запустить некоторые дополнительные шаги при создании версии выпуска и пропуская их во время компиляции SNAPSHOT один, но я не могу найти способ, чтобы включить профиль, если ${project.version} содержит -SNAPSHOT.

Любое предложение?

+0

следующие дополнительные шаги относительно плагинов, имеющих опцию «skip»? –

+0

К дополнительным шагам относятся maven-source-plugin и maven-javadoc-plugin. – conteit86

ответ

8

Ниже возможный подход, который, как вы всегда могли имитировать if заявление в сборке Maven:

  • Используйте buid-helper-maven-plugin и его regex-property цель разобрать по умолчанию ${project.version} property and create a new $ с {только .when.is.snapshot.used} со значением true или ${project.version} в случае наличия SNAPSHOT суффикса.
  • Настройка maven-source-plugin для выполнения своей jar цели специальной конфигурации, используя его skipSource опцию и передавая ему новый (динамический) ${only.when.is.snapshot.used} property: in case of snapshot it will have value истинный hence skip the execution, otherwise will have value ${project.version} which will be used as false` и, следовательно, не пропустить выполнение
  • Настройка так же, как выше для maven-javadoc-plugin используя его skip вариант

образец подхода выше, будет:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.10</version> 
    <executions> 
     <execution> 
      <!-- sets the only.when.is.snapshot.used property to true if SNAPSHOT was used, 
       to the project version otherwise --> 
      <id>build-helper-regex-is-snapshot-used</id> 
      <phase>validate</phase> 
      <goals> 
       <goal>regex-property</goal> 
      </goals> 
      <configuration> 
       <name>only.when.is.snapshot.used</name> 
       <value>${project.version}</value> 
       <regex>.*-SNAPSHOT</regex> 
       <replacement>true</replacement> 
       <failIfNoMatch>false</failIfNoMatch> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-source-plugin</artifactId> 
    <version>3.0.1</version> 
    <executions> 
     <execution> 
      <id>create-sources</id> 
      <phase>package</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <configuration> 
       <!-- skip when version is SNAPSHOT --> 
       <skipSource>${only.when.is.snapshot.used}</skipSource> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-javadoc-plugin</artifactId> 
    <version>2.10.4</version> 
    <executions> 
     <execution> 
      <id>create-javadoc</id> 
      <phase>package</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <configuration> 
       <!-- skip when version is SNAPSHOT --> 
       <skip>${only.when.is.snapshot.used}</skip> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

То есть, нет необходимости в профилях, эта конфигурация будет включена только тогда, когда будет использоваться версия без SNAPSHOT, динамически и без какой-либо дополнительной настройки (параметры командной строки или что-то еще).


В качестве побочного напоминания, вы можете также посмотреть на maven-release-plugin, который будет эффективно ссылаться на источник и JavaDoc плагин только тогда, когда performing релиз без добавления (незначительные) сложности выше подхода.

В противном случае, вы могли бы просто использовать профиль по умолчанию идет от Maven Super POM, который будет на самом деле ссылаться на один и тот же, источник и JavaDoc плагин, и может быть активирована с помощью набора свойств performRelease дорожить true. То есть, в любом проекте Maven вы могли бы вызвать следующее:

mvn clean package -DperformRelease=true 

или

mvn clean package -Prelease-profile 

И вы будете автоматически извлечь выгоду из по умолчанию супер профиля и имеют источники и JavaDoc банки сгенерированные, хотя этот подход должен будет использоваться как последний вариант, поскольку профиль может быть удален из супер-пом в будущих выпусках.

+0

На основе этого замечательного ответа: https://plus.google.com/112346331375070267873/posts/AntD8wE1F3b?hl=es – albfan

0

Я предлагаю вам другое решение.

Почему вы не устанавливаете версию в профиль, а не принимаете решение об активации профиля на версии? Как здесь:

<version>${projectVersion}</version> 

<profiles> 
    <profile> 
     <id>snapshot</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <projectVersion>1.0-SNAPSHOT</projectVersion> 
     </properties> 
    </profile> 
    <profile> 
     <id>release</id> 
     <properties> 
      <projectVersion>1.0-RELEASE</projectVersion> 
     </properties> 
    </profile> 
</profiles> 
+1

Идея gitflow-helper-maven-plugin заключается в том, чтобы использовать одно задание на сервере CI (которое запускает mvn clean deploy) для создания проекта. Согласно ветке, которая компилирует артефакты, они развертываются в моментальных снимках, формируют или выпускают репозитории. Версия управляется с помощью версий: задавать цель при создании новой ветки. – conteit86

+0

В этом случае я не могу активировать определенные профили, поэтому я не могу использовать ваше решение. – conteit86