Плагин релиза Maven с зависимыми от профиля субмодулями - PullRequest
1 голос
/ 21 октября 2010

Я пытаюсь выполнить релиз, используя многомодульный проект maven. Моя цель - изменить версию всех poms и создать тег в SCM, поэтому я использую плагин релиза maven.

Этот проект имеет иерархию, которую я упростил как:

example/
    module1/
    module2/
        module-jni-linux/
        module-jni-macosx/

Файл pom.xml example содержит следующие модули:

<modules>
  <module>module1</module>
  <module>module2</module>
</modules>

И файл pom.xml module2 содержит модули, которые зависят от профиля, определенного типом ОС:

<profiles>
<!-- profile for linux -->
<profile>
  <id>linux</id>
  <activation>
    <os>
      <name>linux</name>
    </os>
  </activation>
  <modules>
    <module>module-jni-linux</module>
  </modules>
</profile>
<!-- profile for mac os -->    
<profile> 
  <id>macosx</id>
  <activation>
    <os>
      <name>mac os x</name>
    </os>
  </activation>
  <modules> 
    <module>module-jni-macosx</module> 
  </modules> 
</profile> 

Наконец, каждый module-jni-* использует native-maven-plugin для компиляции некоторых источников C / C ++ и генерации общей библиотеки.


Проблема:

Когда я пробую mvn release:prepare -DdryRun=true в Mac OS X, я понимаю, что module-jni-linux не учитывается в процессе выпуска. Это означает, что хотя все модули переходят на версию 1.0.0 / 1.0.1-SNAPSHOT, module-jni-linux не изменяется. При выполнении release:prepare мне бы хотелось, чтобы все подмодули обновлялись, даже если его профиль не был активирован.

Я пытался активировать оба профиля с помощью mvn -P linux,macosx ..., но module-jni-linux не будет собираться под Mac (и наоборот).

Как выполнить выпуск, обновляющий версию обоих подмодулей?

Ответы [ 2 ]

1 голос
/ 21 октября 2010

Хорошо, я нашел способ сделать это:

Чтобы создать релиз, плагин maven-release-plugin запускает цели clean и verify перед фиксацией в SCM.Цель verify пытается скомпилировать каждый модуль.

Теперь я настраиваю плагин так, чтобы он запускал только цель verify.Но так как verify важен в любом случае, я запускаю его вручную перед выпуском релиза в разных средах.Моя процедура выпуска будет следующей:

  1. , запустите mvn clean verify в среде Mac и Linux.Для этого я настроил многоузловое задание hudson.
  2. run mvn release:prepare -P macosx,linux -DdryRun=true -DpreparationGoals=clean, при этом активируются оба профиля, но пропускается компиляция
  3. , чтобы проверить, что результаты пробного прогона удовлетворительные
  4. выполните шаг 2 с -DdryRun=false
0 голосов
/ 21 октября 2010

Для вашей конфигурации подключаемого модуля Maven в родительском файле pom.xml вы пробовали использовать параметр <arguments>, указывающий профили, которые вы хотите включить?

Подробнее об этом можно прочитать здесь: http://maven.apache.org/plugins/maven-release-plugin/prepare-mojo.html

В основном это позволяет передавать дополнительные аргументы вызовам Maven, включая профили, такие как -P linux, macosx.

...