2010-10-21 2 views
1

Я пытаюсь выполнить выпуск с использованием мультимодульного проекта maven. Моя цель - модифицировать версию всех помпов и создать тег в SCM, поэтому я использую плагин релиза maven.Плагин релиза 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 для компиляции некоторых источников 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 (и наоборот).

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

ответ

1

Ok Я нашел способ сделать это:

Для того, чтобы создать освобождено, Maven-релиз-плагин запускает clean и verify цели перед совершением ДМВ. Цель verify пытается скомпилировать каждый модуль.

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

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

Я бег в именно этой проблему. Вам удалось решить это по-другому или это единственный обходной путь. Благодарю. – Eugen

0

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

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

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

Смежные вопросы