我需要使用外部(可能是远程).war 文件(App T)作为我的测试内部的 Web 应用程序资源启动一个码头,以便我的被测系统(App A)可以连接到它以针对其 REST 接口运行调用.
我找到了很多关于如何为被测系统之战(App A)启动码头的教程。我还发现了一些关于如何让外部 .war (App T) 的 maven 启动码头作为构建周期的一部分。但是我不知道是否可以执行上述操作。
理想情况下,我将 AppT 项目添加为 maven 依赖项并通过类路径访问它。
我需要使用外部(可能是远程).war 文件(App T)作为我的测试内部的 Web 应用程序资源启动一个码头,以便我的被测系统(App A)可以连接到它以针对其 REST 接口运行调用.
我找到了很多关于如何为被测系统之战(App A)启动码头的教程。我还发现了一些关于如何让外部 .war (App T) 的 maven 启动码头作为构建周期的一部分。但是我不知道是否可以执行上述操作。
理想情况下,我将 AppT 项目添加为 maven 依赖项并通过类路径访问它。
好吧,我不知道你会怎么做,如果它是一个远程战争文件(你可能需要在执行码头插件之前先下载它),但这里是如何去做,当你'已经在你的文件系统的某个地方找到了它:
<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 子文件夹。