6

背景:我正在一个 Maven 项目中设置一个功能测试模块。我们使用maven-jetty-plugin进行测试。

我已经按照这里的描述设置了 jetty 插件(可以很好地使用 Failsafe 插件),但我想做的是使用 jetty(刚刚安装到功能测试模块运行时的本地 maven 存储库)。

jetty 插件的run-war 目标有一个<webApp>元素,它采用字符串路径来部署战争。我更愿意使用我们的 web 模块定义的 maven 坐标来指定要部署的战争。有没有办法做到这一点?

可能的解决方法:

  1. “使用 Maven 更好地构建”的第 4.13 节描述了使用货物来部署使用 maven 坐标指定的战争,但鉴于我们正在使用码头,这是严重的矫枉过正。
  2. 更合理的 IMO 使用 dependency:copy 将刚刚构建和安装的战争工件复制到功能测试模块目标目录中的固定路径,然后我可以在码头插件的<webApp>配置元素中提供该路径。
4

1 回答 1

9

jetty 插件的 run-war 目标有一个元素,它采用字符串路径来部署战争。我更愿意使用我们的 web 模块定义的 maven 坐标来指定要部署的战争。有没有办法做到这一点?

这不是真正应该使用的maven jetty插件,插件部署当前模块的war,默认不支持你想要做的。

“Better Builds with Maven”的第 4.13 节描述了使用 cargo 部署使用 maven 坐标指定的战争,

是的,Cargo 可以以一种干净的方式做到这一点。

但考虑到我们正在使用码头,这是严重的矫枉过正。

我不同意。首先,jetty 插件不支持开箱即用的功能(因此它可能不是正确的工具)。其次,严重的矫枉过正被夸大了,实际上是一种误解,特别是考虑到货物对嵌入式 Jetty 的配置很少(零?)。

更合理的 IMO 是使用 dependency:copy 将刚刚构建和安装的战争工件复制到功能测试模块目标目录中的固定路径

没有冒犯,但你的整个问题听起来有点像:我有一把锤子,钉子没问题,我可以用它来拧螺丝,因为找螺丝刀似乎是一种严重的矫枉过正吗?要回答这个问题(这就是您所说的),您可以使用dependency:copymaven jetty 插件并让整个工作正常工作,但这是一个 hack(因为您实际上没有问任何问题,我猜您想要对此发表意见)。当然最终决定权在你 :)

以防万一,以下是我将如何使用 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>

而且我认为这在客观上不能被定性为“严重的矫枉过正”。

于 2010-02-13T22:51:38.087 回答