如何使用由Maven坐标定义的war文件运行jetty:run-war?

6
背景: 我正在为一个Maven项目设置一个功能测试模块。我们使用maven-jetty-plugin进行测试。
我已经按照这里的说明来设置jetty插件(以便与Failsafe插件协同工作),但是我想要做的是使用jetty部署我们主要web模块的war包(在功能测试模块运行时,该war包刚刚被安装到本地maven仓库中)。
jetty插件的run-war目标具有<webApp>元素,可以接受一个字符串路径以部署war包。我更愿意使用我们web模块定义的Maven坐标指定要部署的war包。有没有办法实现这一点?
可能的解决方法:
  1. 《Maven构建更好》的第4.13节描述了使用Cargo部署指定了Maven坐标的war包,但是考虑到我们正在使用jetty,这是非常繁琐的。
  2. 我认为更合理的方法是使用dependency:copy将刚构建并已安装的war包复制到功能测试模块目录中的固定路径,然后将其提供给jetty插件的<webApp>配置元素。
1个回答

9
jetty插件的run-war目标具有一个元素,它采用要部署的war的字符串路径。我更希望使用由我们的Web模块定义的Maven坐标指定要部署的war。有没有办法做到这一点? 这不是maven jetty插件的预期使用方式,该插件部署当前模块的war,您想要做的不受默认支持。 “使用Maven构建更好”第4.13节描述了使用cargo部署使用maven坐标指定的war, 但考虑到我们正在使用jetty,这有些过度繁琐。 我不同意。首先,jetty插件默认情况下不支持您想要执行的操作(因此它可能不是正确的工具)。其次,“严重过度”的说法被高度夸大,实际上是一种误解,尤其是考虑到对于嵌入式Jetty来说,Cargo需要非常少的配置(零?)。 在我看来,更合理的方法是使用dependency:copy将刚构建和安装的war工件复制到功能测试模块目录中的固定路径。 没有冒犯之意,但您的整个问题听起来有点像:“我有一个锤子,对于钉子来说很好,但如果我需要螺丝钉,是否可以使用它,因为获取螺丝刀似乎过度繁琐?”(这是您实际上在说什么),要回答这个问题,您可以使用dependency:copy并且使用maven jetty插件使整个工作正常,但这是一种方法(因为您实际上没有问任何问题,所以我想您想要对此提出意见)。当然,最终决定取决于您 :) 万一需要,以下是我将如何使用Cargo实现此目的:
<dependencies>
  <dependency>
    <groupId>war group id</groupId>
    <artifactId>war artifact id</artifactId>
    <type>war</type>
    <version>war version</version>
  </dependency>
  ...
</dependencies>
...
<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.cargo</groupId>
      <artifactId>cargo-maven2-plugin</artifactId>
      <configuration>
        <!-- Container configuration -->
        <container>
          <containerId>jetty6x</containerId>
          <type>embedded</type>
        </container>
        <!-- Configuration to use with the container or the deployer -->
        <configuration>
          <deployables>
            <deployable>
              <groupId>war group id</groupId>
              <artifactId>war artifact id</artifactId>
              <type>war</type>
              <properties>
                <context>war context</context>
              </properties>
            </deployable>
          </deployables>
        </configuration>
        <!-- Don't wait, execute the tests after the container is started -->
        <wait>false</wait>
      </configuration>
      <executions>
        <execution>
          <id>start-container</id>
          <phase>pre-integration-test</phase>
          <goals>
            <goal>start</goal>
          </goals>
        </execution>
        <execution>
          <id>stop-container</id>
          <phase>post-integration-test</phase>
          <goals>
            <goal>stop</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    ...
  </plugins>
  ...
</build>

我不认为这可以客观地被归类为“过度杀伤力”。

“serious overkill”这个评论是因为我最初只看到cargo与Geronimo一起使用,当时我认为它是一个部署工具,而不是一个Web应用程序容器(在昨天之前我从未听说过,耸肩)。无论如何,你绝对是正确的,cargo是正确的选择,你上面分享的插件配置已经满足了我99%的需求。感谢您的帮助和澄清。 - cemerick
@Chas 没问题。我很高兴澄清了这一点。祝你好运。 - Pascal Thivent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接