如何从父pom部署多个对等Web应用程序

时间:2009-03-12 17:21:38

标签: maven-2 jetty

我有一套我管理的网络应用程序,我正在努力转移到maven。

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

每个webapps都引用父pom,它们目前都有一个可以工作的jetty maven插件。

我的问题是我如何从父pom挂载每个webapps,以便mvn jetty:run在父目录中工作?

编辑给anwer: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'webapps。因此,在一个命令行参数中可以使用http://localhost:8080/webapp1http://localhost:8080/webapp2

不过,如果答案涉及一个tomcat插件,那就没问题。

2 个答案:

答案 0 :(得分:10)

编辑:我已经完全编辑了我的第一个答案,因为我对OP的期望有了更好的理解。

查看Cargo一个瘦包装器,它允许您以标准方式操作Java EE容器

实际上,Cargo的网站上有一个tutorial,它演示了如何使用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 Plugin Reference Guide):

<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并使用简单的部署Web应用程序(从包含货物插件配置的项目运行):

$ mvn cargo:start

我只是不确定这可以与父pom一起使用(我想知道这是否会导致循环依赖问题)并且我没有测试它。但就个人而言,我会把所有这些东西都放在一个专门的项目中,例如:在您的webapps的兄弟项目中,而不是在父pom中。我不认为这是一个非常重要的事情,这是恕我直言,一个更好的设置,特别是如果你打算使用货物integration testing

答案 1 :(得分:6)

也许此链接可以解决您的问题:

<击> http://www.jiajia.eu/post/2008/10/08/Deploy-multiple-web-apps-with-maven-jetty-plugin.aspx

上面的链接已损坏,所以这里有一个新链接:

http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin

请参阅“运行多个Web应用程序”一节。