2016-08-25 8 views
1

My parent pom определяет 7 модулей, из которых 5 являются зависимыми jar s, а два - war s, которые зависят от этих банках.Использование профилей для исключения модулей WAR из «mvn install»

Вопрос: Можно ли использовать Maven profiles (или другое решение), чтобы определить, какие модули включены, когда mvn install запускается против родительского ПОМ, чтобы исключить два военных пакетов?

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

+0

Вы когда-нибудь считается 'МВН --projects Модуль --also-макияж dependent'? – khmarbaise

ответ

1

Вы можете использовать build-helper-maven-plugin в файле родительского pom.xml, чтобы создать новое свойство на основе packaging (во время выполнения он изменял от pom для родителей, чтобы jar и war для модулей). Это новое свойство можно было бы использовать для динамического прогона maven-install-plugin.

Простой пример:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.10</version> 
    <executions> 
     <execution> 
      <id>build-helper-regex-is-packaging-war</id> 
      <phase>validate</phase> 
      <goals> 
       <goal>regex-property</goal> 
      </goals> 
      <configuration> 
       <name>only.when.war.is.used</name> 
       <value>${project.packaging}</value> 
       <regex>war</regex> 
       <replacement>true</replacement> 
       <failIfNoMatch>false</failIfNoMatch> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

<plugin> 
    <artifactId>maven-install-plugin</artifactId> 
    <version>2.5.2</version> 
    <configuration> 
     <skip>${only.when.war.is.used}</skip> 
    </configuration> 
</plugin> 

Это динамическое ${only.when.war.is.used} свойство будет установлен true только тогда, когда project.packaging будет иметь значение war и, таким образом эффективно пропускать maven-install-plugin казни через его skip вариант.


Вы могли бы переместить это поведение в профиль и имеют различные настройки для jar и war, держа их в общем месте: корень pom.xml, благодаря их динамическому поведению.


Что касается способности обнаруживать уже установлен ли артефакт или нет, не существует такого варианта по документации official плагина, и я не думаю, что вы могли бы иметь такое поведение, просто с помощью плагина ,

Однако вы можете использовать механизм активации maven profile в случае отсутствия файла (установленного файла) и соответственно активировать профиль.

Вы могли бы иметь в динамике (основываясь только на стандартных свойств) следующий подход:

<profiles> 
    <profile> 
    <activation> 
     <file> 
     <missing>${settings.localRepository}/${project.groupId}/${project.artifactId}/${project.build.fileName}.${project.packaging}</missing> 
     </file> 
    </activation> 
    ... 
    </profile> 
</profiles> 
+0

@amphibient вы решили эту проблему? ответ помог вам? –