如何让jetty-maven-plugin部署从存储库检索的战争?

问题描述 投票:0回答:3

我正在为一个大型 Web 项目设置一个集成测试模块。集成测试模块与Web项目本身分离,并且有自己的pom。

想法是使用 maven-soapui-plugin 发送请求并验证响应。设置soapui插件并不麻烦。但是,我无法弄清楚如何告诉 jetty-maven-plugin 从远程存储库部署战争。

如果我理解正确的话,jetty-maven-plugin 有一个名为“/”的属性,它可以让我指定要部署的 war 文件。问题是模块本身不存在 war 文件。

我听说我可以使用 Maven 程序集插件通过项目 artifactId 从存储库中检索战争,但我还没有弄清楚如何做到这一点。

这是我想要的摘要:

  1. 从存储库等中检索特定的战争,例如通过其artifactId。
  2. 将这场战争部署到 jetty-maven-plugin(目标部署战争?)
  3. 让 maven-soapui-plugin 运行测试并在集成测试阶段报告结果。

我很确定我已经完成了第 3 步,但我非常不确定如何实现第 1 步和第 2 步。

非常感谢任何帮助

maven-2 soapui pom.xml maven-assembly-plugin maven-jetty-plugin
3个回答
6
投票

也许可以使用dependency:copy

来检索战争,解压它并让整个事情与maven jetty插件一起工作,但这会很hacky并且有点难看。更干净的解决方案是使用 
Maven Cargo 插件,这是我的建议。下面的 POM 示例展示了如何使用坐标检索 WAR 工件以及如何使用 Cargo 将其部署到嵌入式 Jetty 容器上:

<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>

最后只需在

integration-test

阶段绑定soapui插件即可。


5
投票
约翰,我正在做同样的事情,但我对 Jetty 插件采取了不同的方法。我认为最终的结果是一样的。我正在开发一个集成测试套件来针对多个 Web 服务 WAR 运行。我在

dependency:copy

 阶段使用 
package
,然后为 
<contextHandler/>
 配置 
maven-jetty-plugin
 列表:

<project> … <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-wars</id> <phase>package</phase> <goals> <goal>copy</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/wars-to-be-tested</outputDirectory> <stripVersion>true</stripVersion> <artifactItems> … <artifactItem> <groupId>groupId</groupId> <artifactId>artifactId</artifactId> <version>version</version> <type>war</type> </artifactItem> … </artifactItems> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>7.1.3.v20100526</version> <configuration> … <contextHandlers> … <contextHandler implementation="org.mortbay.jetty.plugin.JettyWebAppContext"> <war>${project.build.directory}/wars-to-be-tested/artifactId.war</war> <contextPath>/context</contextPath> </contextHandler> </contextHandlers> </configuration> <executions> <execution> <id>start-jetty</id> <phase>pre-integration-test</phase> <goals> <goal>stop</goal> <goal>run</goal> </goals> <configuration> <scanIntervalSeconds>0</scanIntervalSeconds> <daemon>true</daemon> </configuration> </execution> <execution> <id>stop-jetty</id> <phase>post-integration-test</phase> <goals> <goal>stop</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>

我更愿意将各种战争声明为依赖项,然后使用

dependency:copy-dependencies

 设置 
wars-to-be-tested
 目录;这将使 Maven 反应堆知道它需要在将要测试的战争之后构建我的集成测试模块。我遇到的问题是 Jetty 插件认为我想“覆盖”所有被列为依赖项的战争(这个概念在我看到它发生之前我从未听说过);我不知道允许这种情况发生是否会造成任何伤害,但我不喜欢它,所以我采用了
dependency:copy
方法。

这只是使用 Cargo 的一种替代方法。我会自己研究这个问题,但我只是想提供另一种方法。


0
投票
基于@blaldor的答案添加

maven-dependency-plugin

,然后我必须修改它如下:

<plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>${jetty.version}</version> <configuration> <supportedPackagings>jar</supportedPackagings> <contextHandlers> <contextHandler implementation="org.eclipse.jetty.maven.plugin.JettyWebAppContext"> <war>${project.build.directory}/wars-to-be-tested/artifactId.war</war> </contextHandler> </contextHandlers> <webApp> <contextPath>/artifactId</contextPath> </webApp>
(这对于评论来说太大了)

© www.soinside.com 2019 - 2024. All rights reserved.