我需要在我的测试中使用外部(可能是远程的).war文件(App T)作为Web应用程序资源启动一个码头,以便我的测试系统(App A)可以连接到它以运行调用它的REST接口。
我找到了很多关于如何为被测系统(App A)的战争启动码头的教程。我还发现了一些关于如何让maven启动jetty作为构建周期的外部.war(App T)的一部分。但是我无法弄清楚是否可以做到以上几点。
理想情况下,我将AppT项目添加为maven依赖项,并通过classpath访问它。
答案 0 :(得分:3)
好吧,我不知道你会怎么做,如果它是一个远程war文件(你可能需要在执行jetty插件之前先下载它),但是这里是怎么做的,当你已经把它放在文件系统的某个地方时:
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${version.jetty}</version>
<configuration>
<contextHandlers>
<contextHandler implementation="org.eclipse.jetty.webapp.WebAppContext">
<war>${project.build.directory}/webapps/foo-bar.war</war>
<contextPath>/foo</contextPath>
</contextHandler>
</contextHandlers>
</configuration>
</plugin>
我的建议是将该战争添加为范围依赖:提供。
<dependencies>
<!-- Webapps which will not be included in the final WAR artifact: -->
<dependency>
<groupId>com.foo.bar</groupId>
<artifactId>foo-bar</artifactId>
<version>${version.foo.bar}</version>
<type>war</type>
<scope>provided</scope>
</dependency>
</dependencies>
此外,您最有可能需要以下内容:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<!-- Used to copy the foo bar war to the webapps folder -->
<id>copy-dependency-foo-bar</id>
<phase>process-resources</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.foo.bar</groupId>
<artifactId>foo-bar</artifactId>
<version>${version.foo.bar}</version>
<type>war</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/webapps</outputDirectory>
<destFileName>foo-bar.war</destFileName>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
上面的最后一点将确保在jetty插件尝试加载之前,已解析的工件被复制到目标目录的webapps子文件夹中。