Как развернуть несколько одноранговых веб-приложений из родительского pom

У меня есть управляемый набор веб-приложений, которые я пытаюсь перенести на maven.

/pom.xml            // parent pom
 webapp1/pom.xml    // configured to point to parent
 webapp2/pom.xml    // peer of webapp1 and points to parent.

каждое из веб-приложений ссылается на родительский pom, и в настоящее время у них обоих есть работающий плагин jetty maven.

У меня вопрос: как смонтировать каждое из веб-приложений из родительского pom, чтобы mvn jetty: run работал в родительском каталоге?

отредактируйте ответ: Pascal T Проблема не столько в том, что я получаю сообщение об ошибке, когда пытаюсь запустить команду из корневого pom, сколько в том, что я не уверен, как ее настроить.

например, webapp1 / pom.xml выглядит так:

<project>
...
<plugins>
  <plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>maven-jetty-plugin</artifactId>
  </plugin>
</plugins>
...
</project>

переход в этот каталог и ввод mvn jetty: run отлично работает и дает мне возможность нажать: http://localhost:8080/webapp1.

Однако я бы хотел быть в родительском элементе webapp1 и запускать все n веб-приложений из родительского каталога. Таким образом, имея http://localhost:8080/webapp1 и http://localhost:8080/webapp2 доступен с одним параметром командной строки.

кстати, если бы ответ включал плагин tomcat, это было бы хорошо.


person Nathan Feger    schedule 12.03.2009    source источник
comment
Я лучше понимаю, что вы хотите сделать, и отредактировал свой первоначальный ответ   -  person Pascal Thivent    schedule 20.09.2009
comment
Тот же вопрос, что и у Возможен запуск двух веб-приложений сразу при разработке с Maven / Eclipse?. На этот вопрос есть хороший ответ! (От @Janning)   -  person stolsvik    schedule 19.09.2011


Ответы (1)


ИЗМЕНИТЬ: я полностью отредактировал свой первый ответ, теперь, когда я лучше понимаю ожидания OP.

Попробуйте Cargo, тонкую оболочку, которая позволяет вам управлять контейнерами Java EE стандартным способом .

На самом деле на веб-сайте Cargo есть руководство, демонстрирующее, как использовать Плагин Cargo Maven2 для автоматического запуска / остановки контейнера (возможно, развертывание в нем некоторых развертываемых объектов по мере его запуска), это то, что вы ищете из того, что я понял.

Я просто не уверен, что сделать это из родительского каталога возможно, и если это необходимо, или можно ли сделать это из другого каталога. Я вернусь к этому позже. Давайте сначала посмотрим на настройку плагина Cargo Maven2.

В вашем случае вы можете начать с минимальной конфигурации (которая использует Jetty 5.x, который является контейнером Cargo по умолчанию):

[...]
<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.cargo</groupId>
      <artifactId>cargo-maven2-plugin</artifactId>
    </plugin>
  </plugins>
</build>
[...]

Если вы хотите использовать Jetty 6.x, вам нужно указать <containerId> и <type> в элементе <container>:

[...]
<plugin>
 <groupId>org.codehaus.cargo</groupId>
 <artifactId>cargo-maven2-plugin</artifactId>
 <configuration>
   <container>
     <containerId>jetty6x</containerId>
     <type>embedded</type>
   </container>
 </configuration>
</plugin>
[...]

Затем добавьте модули, которые вы хотите развернуть, явно указав deployables в конфигурации подключаемого модуля (см. Справочное руководство по плагину Maven2 для получения подробной информации о конфигурации):

<deployables>
  <deployable>
    <groupId>com.mycompany.myproject</groupId>
    <artifactId>myproject-alpha</artifactId>
    <type>war</type>
    <properties>
      <context>optional alpha root context</context>
    </properties>
  </deployable>
  <deployable>
    <groupId>com.mycompany.myproject</groupId>
    <artifactId>myproject-beta</artifactId>
    <type>war</type>
    <properties>
      <context>optional beta root context</context>
    </properties>
  </deployable>
  [...]
</deployables>

Благодаря этому вы сможете запустить Jetty и развернуть на нем свои веб-приложения с помощью простого (для запуска из проекта, содержащего конфигурацию плагина Cargo):

$ mvn cargo:start

Я просто не уверен, что это может работать с родительским pom (интересно, может ли это привести к проблемам с циклическими зависимостями), и я не тестировал его. Но лично я бы поместил все это в помпону отдельного проекта, например в родственном проекте ваших веб-приложений, а не в родительском pom. Я не думаю, что это действительно большое дело, и это, ИМХО, лучшая установка, особенно если вы планируете использовать груз для интеграционное тестирование.

person Pascal Thivent    schedule 12.03.2009
comment
+1, но учтите одно дополнение: если конфигурация в родительском элементе установлена ​​в разделе pluginManagement, дочерним веб-приложениям нужно только объявить плагин (как во фрагменте кода OPs) для наследования конфигурации. Это позволяет избежать проблем с циклом. - person Rich Seller; 20.09.2009