从内部(JUnitRunner)集成测试启动具有外部战争的Jetty

时间:2012-06-21 11:51:31

标签: maven junit jetty integration-testing embedded-jetty

我需要在我的测试中使用外部(可能是远程的).war文件(App T)作为Web应用程序资源启动一个码头,以便我的测试系统(App A)可以连接到它以运行调用它的REST接口。

我找到了很多关于如何为被测系统(App A)的战争启动码头的教程。我还发现了一些关于如何让maven启动jetty作为构建周期的外部.war(App T)的一部分。但是我无法弄清楚是否可以做到以上几点。

理想情况下,我将AppT项目添加为maven依赖项,并通过classpath访问它。

1 个答案:

答案 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子文件夹中。