【问题标题】:Add test classpath to Jetty run by Cargo将测试类路径添加到由 Cargo 运行的 Jetty
【发布时间】:2013-12-19 17:03:18
【问题描述】:

我想使用 Cargo 运行 Jetty,但我想将测试资源添加到 Jetty 类路径。

这是我的 Maven 配置:

        <plugin>
            <groupId>org.codehaus.cargo</groupId>
            <artifactId>cargo-maven2-plugin</artifactId>
            <version>1.4.5</version>
            <executions>
                <execution>
                    <id>start-jetty</id>
                    <phase>pre-integration-test</phase>
                    <goals><goal>start</goal></goals>
                    <configuration>
                        <configuration>
                            <properties>
                                <cargo.jvmargs>${argLine}</cargo.jvmargs>
                            </properties>
                        </configuration>
                    </configuration>
                </execution>
                <execution>
                    <id>stop-jetty</id>
                    <phase>post-integration-test</phase>
                    <goals><goal>stop</goal></goals>
                </execution>
            </executions>
            <configuration>
                <container>
                    <containerId>jetty8x</containerId>
                    <type>embedded</type>
                    <log>${basedir}\target\cargo.log</log>
                    <output>${basedir}\target\jetty.log</output>
                    <dependencies>
                        <dependency>
                            <groupId>mysql</groupId>
                            <artifactId>mysql-connector-java</artifactId>
                        </dependency>
                    </dependencies>
                </container>

                <configuration>
                    <properties>
                        <cargo.servlet.port>8081</cargo.servlet.port>
                        <cargo.logging>high</cargo.logging>
                        <cargo.jvmargs>${argLine} -Denv=test</cargo.jvmargs>
                    </properties>
                </configuration>

                <deployables>
                    <deployable>
                        <pingURL>http://localhost:8081/myapp/</pingURL>
                        <pingTimeout>600000</pingTimeout>
                        <properties>
                            <context>myapp</context>
                        </properties>
                    </deployable>
                </deployables>
            </configuration>
        </plugin>

不使用 Cargo,我在 Jetty 配置中使用 useTestClasspath

            <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>6.1.26</version>
            <configuration>
                <contextPath>myapp</contextPath>
                <webAppSourceDirectory>WebContent</webAppSourceDirectory>
                <stopPort>9699</stopPort>
                <stopKey>foo</stopKey>
                <scanIntervalSeconds>0</scanIntervalSeconds>
                <connectors>
                    <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                        <port>8081</port>
                    </connector>
                </connectors>
                <useTestClasspath>true</useTestClasspath>
                <systemProperties>
                    <systemProperty>
                        <name>jettyMode</name>
                        <value>true</value>
                    </systemProperty>
                </systemProperties>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.18</version>
                </dependency>
            </dependencies>
        </plugin>

有没有办法用一种 useTestClasspath 来配置 Cargo ? 谢谢。

【问题讨论】:

  • 你有一个奇怪的码头版本组合,jetty8x 的货物和 6.1.26 的 jetty-maven-plugin。
  • 我最初的问题是在运行集成测试时使用 Jacoco 进行代码覆盖。我在预集成测试阶段启动了 Jetty6,但我读到通过这种方式不可能覆盖代码。所以现在,我尝试使用 cargo,但我正在从测试资源中读取我的数据库配置。在这种情况下,Jetty 版本并不重要。
  • jetty 6 早在 2010 年就停产了。自 jetty 6.1.26 以来,jetty 已经发布了 100 多个版本。使用 junit + 嵌入式码头,jacoco 集成可能更容易完成

标签: java jetty maven-cargo


【解决方案1】:

如果我正确理解了您的问题,那么您的问题是,您的某些依赖项位于 &lt;scope&gt;test&lt;/scope&gt; 中,因此它们未打包到您的 war(或 ear)文件中,并且在您的集成(或其他) 测试,在容器内工作时。

要实现该行为,您可以向容器定义添加依赖项,就像向 mysql-connector-java 添加依赖项一样,您的配置中缺少的是 &lt;type&gt;

<container>
         ...
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <type>jar</type>
        </dependency>
    </dependencies>
 </container>

此外,该依赖项的 artfactId 和 groupId 必须解析为已在您的 pom 中定义的依赖项(作为依赖项)。看这里Cargo Maven2 Reference

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多