Jetty守护进程和useTestClasspath,我做错了什么?

时间:2012-05-09 07:14:07

标签: maven jetty maven-jetty-plugin

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

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

    <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>
    

    提前感谢您提供的帮助。我必须为我的语法道歉,因为我的英语非常糟糕 问候,
    Depado

2 个答案:

答案 0 :(得分:1)

不确定您的第一个问题,但是对于您的第二个问题,请在主依赖关系块中指定postgresql jar作为提供范围(这将阻止它在战争中捆绑),并在jetty中添加一个额外的依赖块插件定义(带编译范围),这将使jetgtime运行时可以使用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(由jetty为数据源(postegresql-driver)调用)因为它将被嵌入到应用程序中我不希望它在战争中(客户端)。所以我想使用true但是当我将postgresql放在src / test / resources中时它找不到/识别它

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

我还想象在定义webApp配置元素时会忽略useTestClasspath,因为它使用的是打包的war,它不包含测试资源/类

答案 1 :(得分:0)

useTestClasspath / useTestScope仅适用于jetty:run

这就是为什么它不适用于码头:战争和其他码头:目标