2009-09-17 3 views
2

У меня есть родитель ПОМ, который настраивает некоторые плагиныНастройка Maven плагинов склеивать

<pluginManagement> 
    </plugins> 
     <plugin> 
     <artifactId>gmaven-plugin</artifactId> 
     ... 
     </plugin> 
     <plugin> 
     <artifactId>maven-resources-plugin</artifactId> 
     ... 
     </plugin> 
     <plugin> 
     <artifactId>cargo-maven2-plugin</artifactId> 
     ... 
     </plugin> 
    </plugins> 
</pluginManagement> 

И у меня есть дерево POMS, которые представляют собой интеграционные тесты

A-\ 
    a1 
    a2 
B-\ 
    b1 
    b2 
C-\ 
    D-\ 
     d1 
     d2 

В каждом а, б, г продукты Я принимаю

<build> 
    <plugins> 
     <plugin> 
     <artifactId>gmaven-plugin</artifactId> 
     </plugin> 
     <plugin> 
     <artifactId>maven-resources-plugin</artifactId> 
     </plugin> 
     <plugin> 
     <artifactId>cargo-maven2-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

Проблема заключается в том, что мне нужно будет добавить четвертый плагин для процесса интеграции теста для e xample мой пользовательский плагин Мне нужно будет переместить через все модули интеграции и сделать ручное добавление.

Вы можете посоветовать мне удалить <pluginManagement>, чтобы разрешить всем ребенку использовать их неявно. Да, но в продуктах, которые просто «pom», я не хочу, чтобы плагины ничего не делали: создайте некоторые ресурсы и разместите каталоги конфигурации jboss.

Интересно, есть ли какая-то

<pluginsBundle> 
    <groupId>my.group</groupId> 
    <artifactId>my-integration-test-bundle</artifactId> 
    <plugins> 
     <plugin> 
     <artifactId>gmaven-plugin</artifactId> 
     </plugin> 
     <plugin> 
     <artifactId>maven-resources-plugin</artifactId> 
     </plugin> 
     <plugin> 
     <artifactId>cargo-maven2-plugin</artifactId> 
     </plugin> 
    </plugins> 
</pluginsBundle> 

Чтобы разрешить мне использовать его так же, как

<plugin> 
     <groupId>my.group</groupId> 
     <artifactId>my-integration-test-bundle</artifactId> 
     <runOnce>true</runOnce> 
    </plugin> 

Я хотел бы добавить опцию как

<runOnce>true</runOnce> 

быть возможность запускать сервер приложений и развертывание цели только один раз на запуск maven.

ответ

2

Я не знаю механизма, который делает именно то, что вам нужно. Лучше всего определить родительскую поместье с теми плагинами, которые определены в разделе сборки, а не в разделе pluginManagement. В этом случае конфигурация плагина всегда будет определена. Добавление конфигурации в профиль в родительском означает, что вы можете осуществлять некоторый контроль над активацией этих плагинов.

Следует учесть, что вы можете контролировать активацию профиля по наличию или отсутствию файла. Таким образом, вы можете определить профиль в родительском объекте, но его деактивировать в этом проекте из-за того, что файл-маркер присутствует в родительском. Проекты-дети не будут иметь файл-маркер в своем источнике, поэтому профиль будет активирован для этих проектов. Вы можете изменить поведение, используя missing вместо exists, если это имеет смысл для большинства проектов.

<profile> 
    <id>build</id> 
    <activation> 
    <file> 
     <missing>src/main/resources/build.marker</missing> 
     <!-- or if you want to enable the profile when the file does exist: 
     <exists>src/main/resources/build.marker</exists--> 
    </file> 
    </activation> 
    <build> 
    </plugins> 
     <plugin> 
     <artifactId>gmaven-plugin</artifactId> 
     ... 
     </plugin> 
     <plugin> 
     <artifactId>maven-resources-plugin</artifactId> 
     ... 
     </plugin> 
     <plugin> 
     <artifactId>cargo-maven2-plugin</artifactId> 
     ... 
     </plugin> 
    </plugins> 
    </build> 
</profile> 

В качестве альтернативы, вы можете попробовать написать собственный плагин с жизненным циклом, который выполняет весь необходимый mojos в раздвоенном жизненном цикле. Недавно я ответил another question с подробностями о том, как это сделать.

Другой альтернативой является создание другого плагина, который использует Maven shared-io для применения дескриптора к pom, который может определять произвольную конфигурацию, которая объединяется в pom. Другой вариант answer описывает, как это можно сделать.

+0

Я не могу использовать родительский pom с секцией в сборке, потому что я не хочу, чтобы pom с модулями запускал плагины. –

+0

Что можно сказать о других вариантах? –

+0

Я посмотрел ваш ответ «shared-io», и, честно говоря, мне не ясно, как я могу его использовать. –

0

AFAIK, нет способа объявить набор плагинов, которые могут быть использованы где-то еще ... но есть наследование.

А как насчет создания помпы с объявлением <plugins> в разделе <build> и наследованием от этого пом в ваших проектах интеграционных тестов? Это выглядит практически осуществимым.

+0

Я написал об этом случае. Я не хочу простых попов с для запуска плагинов. –