Настроить подключаемые модули Maven - PullRequest
2 голосов
/ 17 сентября 2009

У меня есть родительский pom, который настраивает определенные плагины

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

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

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

В каждом продукте a, b, d я делаю

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

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

Вы можете посоветовать мне удалить <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 ]

2 голосов
/ 17 сентября 2009

Я не знаю механизма, который делает именно то, что вам нужно. Лучше всего определить родительский pom с теми плагинами, которые определены в разделе сборки, а не в разделе 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>

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

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

0 голосов
/ 17 сентября 2009

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

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

...