Maven создает файл WAR, но сначала создает файл JAR

У меня есть два проекта Maven в Eclipse, оба со своим собственным POM.

Проект A создает файл JAR.

Проект B создает файл WAR.

Когда я запускаю команду "package" для проекта B, я бы хотел, чтобы он также упаковал проект A, а затем скопировал полученный файл JAR в произвольное место в проекте B.

Я попытался (и преуспел) в копии, используя значение webResources в плагине maven-war-plugin, например:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.0.2</version>
  <configuration>
    <webResources> 
      <resource> 
        <directory>../ProjectA/target</directory> 
        <targetPath>.</targetPath>
        <includes>
          <include>ProjectA*.jar</include>
        </includes>
        <excludes>
          <exclude>*shaded*.jar</exclude>
        </excludes>
      </resource> 
   </webResources> 

Но как я могу заставить POM для проекта B выполнить сборку проекта A?

Альтернативный подход, который я пробовал, заключался в том, чтобы сделать проект A зависимостью от проекта B, чтобы он мог быть импортирован в каталог WEB-INF/lib WAR, а затем перемещен в другое место. Но это кажется немного грязным.

Любая помощь, очень признательна.


person Phil    schedule 20.04.2011    source источник


Ответы (1)


Для этого вы должны создать многомодульную сборку с такой структурой.

  root
   +-- pom.xml
   +-- ProjectA
          +-- pom.xml
   +-- ProjectB
          +-- pom.xml

Со структурой, подобной приведенной выше, вы можете очень элегантно справиться со своей проблемой. Кроме того, прочитайте о многомодульных сборках и т. д. используйте более свежую версию maven-war-plugin , потому что текущая версия 2.1.1, а не 2.0.X.

person khmarbaise    schedule 20.04.2011
comment
В ПОРЯДКЕ. Вы предполагаете, что новый pom.xml живет в проекте Eclipse B? Итак, проект B имеет два pom, один из которых вызывает Project A, а затем его подкаталог POM? - person Phil; 20.04.2011
comment
Нет. Вы создаете папку, назовите ее родительской и поместите эту структуру в эту папку. Этот проект будет импортирован в Eclipse, а не отдельные проекты. Используете ли вы Eclipse, если да, проверьте плагин m2eclipse. (отредактировал ответ). - person khmarbaise; 20.04.2011
comment
Я думаю, что ваш подход правильный, но мне нужно больше исследовать мультимодули. Спасибо за совет. - person Phil; 21.04.2011