1

由于我试图在我的 Maven 项目中设置一个嵌入式容器,我希望它在集成测试阶段运行。我有两个无法解决的码头问题:

  1. <daemon>true</daemon>没有预期的效果。服务器正在运行,但随后它锁定了构建过程(实际上它阻止了单元测试)。那么我应该在哪里放置该配置?
  2. <useTestClasspath>true</useTestClasspath>对我来说是个谜。我不想使用src/main/webapp/WEB-INF/lib来放置 postgresql jar(由码头为数据源(postegresql-driver)调用),因为它将嵌入到应用程序中,我不希望它在战争中(客户端边)。所以我想使用<useTestClasspath>true</useTestClasspath>,但是当我将 postgresql 放入其中时,src/test/resources它找不到/识别它。那么,我应该如何使用该属性?

这是完整的插件配置:

<plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>6.1.9</version>
            <executions>
                <execution>
                    <id>start-jetty</id>
                    <phase>pre-integration-test</phase>
                    <goals>
                        <goal>run-war</goal>
                    </goals>
                    <configuration>
                        <useTestClasspath>true</useTestClasspath>
                        <daemon>true</daemon>
                        <contextPath>agepro-prototype</contextPath>
                        <webApp>
                            ${project.build.directory}/agepro-prototype.war
                        </webApp>
                    </configuration>
                </execution>
                <execution>
                    <id>stop-jetty</id>
                    <phase>post-integration-test</phase>
                    <goals>
                        <goal>stop</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <connectors>
                    <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                        <port>9091</port> 
                    </connector>
                </connectors>
                <stopPort>9092</stopPort>
                <stopKey>test</stopKey>
            </configuration>
        </plugin>

提前感谢您为我提供的帮助。我必须为我的语法道歉,因为我的英语很糟糕。
问候,
德帕多

4

2 回答 2

1

不确定你的第一个问题,但至于你的第二个问题,在你的主要依赖块中指定 postgresql jar 作为提供的范围(这将防止它被捆绑在战争中),并在码头插件定义中添加一个额外的依赖块(带有编译范围),这将使 postgresql jar 在码头运行时可用:

<build>
<plugins>
    <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
        <version>6.1.9</version>
        <executions>
            <execution>
                <id>start-jetty</id>
                <phase>pre-integration-test</phase>
                <goals>
                    <goal>run-war</goal>
                </goals>
                <configuration>
                    <daemon>true</daemon>
                    <contextPath>agepro-prototype</contextPath>
                    <webApp>
                        ${project.build.directory}/agepro-prototype.war
                    </webApp>
                </configuration>
            </execution>
            <execution>
                <id>stop-jetty</id>
                <phase>post-integration-test</phase>
                <goals>
                    <goal>stop</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <connectors>
                <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                    <port>9091</port> 
                </connector>
            </connectors>
            <stopPort>9092</stopPort>
            <stopKey>test</stopKey>
        </configuration>
        <dependencies>
            <dependency>
                <groupId>postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <version>9.1-901-1.jdbc4</version>
            </dependency>
        </dependencies>
    </plugin>
</plugins>
</build>

<dependencies>
    <dependency>
        <groupId>postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.1-901-1.jdbc4</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

我不想使用 src/main/webapp/WEB-INF/lib 来放置 postgresql jar(由码头为数据源(postegresql-driver)调用),因为它将嵌入到应用程序中,我不'不希望它在战争中(客户端)。所以我想使用 true 但是当我将 postgresql 放在 src/test/resources 中时它找不到/识别它

您不应该将 jars 放在任何文件夹(src/main/resources 或 src/main/webapp/WEB-INF/classes)中,它们都应该在 pom.xml 中定义为依赖项。

我还想象当你定义 webApp 配置元素时 useTestClasspath 被忽略,因为它使用打包的战争,它不包含你的测试资源/类

于 2012-05-09T11:00:39.277 回答
0

useTestClasspath/useTestScope 仅适用于 jetty:run

这就是为什么它不适用于 jetty:run-war 和其他 jetty:goals

于 2016-06-12T00:59:30.743 回答