1

我正在尝试实现如何为 Jetty 的 Maven Cargo 插件指定 jetty-env.xml 文件中提到的解决方案?

但是,我面临着更根本的问题:我的 Cargo 根本没有生成任何上下文 xml。

<plugin>
    <groupId>org.codehaus.cargo</groupId>
    <artifactId>cargo-maven2-plugin</artifactId>
    <version>1.2.1</version>
    <configuration>
        <!-- Container configuration -->
        <container>
            <containerId>jetty6x</containerId>
            <type>embedded</type>
        </container>
        <!-- Configuration to use with the container or the deployer -->
        <configuration>
            <properties>
                <cargo.servlet.port>${itest.webapp.port}</cargo.servlet.port>
                <cargo.jetty.createContextXml>true</cargo.jetty.createContextXml>
            </properties>
            <deployables>
                <deployable>
                    <groupId>${project.groupId}</groupId>
                    <artifactId>myApp-web</artifactId>
                    <type>war</type>
                    <properties>
                        <context>/myApp</context>
                    </properties>
                </deployable>
            </deployables>
<!--
            <configfiles>
                <configfile>
                    <file>${project.build.outputDirectory}/jetty-env.xml</file>
                    <todir>contexts</todir>
                    <tofile>${jetty6.context}.xml</tofile>
                </configfile>
            </configfiles>
-->
        </configuration>
    </configuration>
    <executions>
        <execution>
            <id>start-container</id>
            <phase>pre-integration-test</phase>
            <goals>
                <goal>start</goal>
            </goals>
        </execution>
        <execution>
            <id>stop-container</id>
            <phase>post-integration-test</phase>
            <goals>
                <goal>stop</goal>
            </goals>
        </execution>
    </executions>
</plugin>

基本思想是,我们提供一个自定义的 context.xml 来替换生成的那个。但是,当我尝试时,我找不到 Cargo 生成的任何上下文 XML(请注意,我已经注释了自定义配置文件,并且 cargo.jetty.createContextXml 为 true)

我不确定是否是我的设置问题导致未生成上下文,或者上下文是在我忽略的地方生成的。我检查了 target/cargo/ 和 cargo 扩展了我的 WAR 的临时目录,这两个地方都不包含上下文 xml。

(我正在使用 Maven 2.2.1、Cargo 1.2.1、JDK 6)

4

1 回答 1

0

我不是 100% 确定您的问题是什么,但这是货物在我的系统上为 Jetty6 所做的事情。

Jetty 安装所在的目录不是运行时上下文和 webapp 文件所在的目录。在我的例子中,它们存储在 Java 临时目录(即java.io.tmpdir)中。在我的 Ubuntu 系统上,这是/tmp. 在这个目录下,有一个cargo/conf目录。在/tmp/cargo/conf我有一个context.xml存储文件的上下文目录下 - 尽管文件的实际名称永远不会context.xml它总是以 Web 应用程序上下文命名。

在我的例子中,这个文件的名称与我配置货物的上下文相同。这可能是您的问题,因为我注意到您没有像我一样提供上下文:

<deployables>
    <deployable>
       <properties>
         <!-- Web root context URL -->
         <context>${build.appserver.context}</context>
       </properties>
    </deployable>
</deployables>

其次,我还注意到您已经注释掉了将 context.xml 文件放置在正确位置的部分。除非您取消注释,否则这是行不通的。

第三,你是否设置了${jetty6.context}Maven 属性的值?

第四 - 我认为要使其工作,您需要使用 Jetty 的独立配置。这应该不是问题,因为 Cargo 会自动为您下载并安装它。在这里查看我的配置:

                      <container>
                          <containerId>jetty6x</containerId>
                          <!-- Using Jetty for build portability so type != "remote". For Jetty
                              would prefer type = "embedded" but we must go with "installed" because jetty-env.xml
                              file would be ignored. See http://jira.codehaus.org/browse/CARGO-861 -->
                          <type>installed</type>
                          <zipUrlInstaller>
                              <url>http://dist.codehaus.org/jetty/jetty-6.1.26/jetty-6.1.26RC0.zip</url>
                              <installDir>${build.working}</installDir>
                          </zipUrlInstaller>
                          <dependencies>
                              <!-- The following dependencies are added to the servlet container's
                                  classpath as if they were installed by a system admin. In order to be included
                                  here, they need to be listed as dependencies in this pom.xml. -->
                              <dependency>
                                  <groupId>com.h2database</groupId>
                                  <artifactId>h2</artifactId>
                              </dependency>
                              <dependency>
                                  <groupId>com.oracle</groupId>
                                  <artifactId>ojdbc5</artifactId>
                              </dependency>
                              <dependency>
                                  <groupId>mysql</groupId>
                                  <artifactId>mysql-connector-java</artifactId>
                              </dependency>
                              <dependency>
                                  <groupId>net.sourceforge.jtds</groupId>
                                  <artifactId>jtds</artifactId>
                              </dependency>
                          </dependencies>
                      </container>
                      <!-- Do not hang and wait for a client, just do it -->
                      <wait>false</wait>
                      <configuration> <!-- Deployer configuration -->
                          <!-- Running Jetty container with type=installed (e.g. local) so
                              type != "runtime", and we are installing it during this execution for the
                              sake of portability so type != "existing" -->
                          <type>standalone</type>
                          <properties>
                              <!-- Use the port number from settings.xml -->
                              <cargo.servlet.port>${build.appserver.port}</cargo.servlet.port>
                          </properties>
                          <deployables>
                              <deployable>
                                  <properties>
                                      <!-- Web root context URL -->
                                      <context>${build.appserver.context}</context>
                                  </properties>
                              </deployable>
                          </deployables>
                          <configfiles>
                              <configfile>
                                  <file>${basedir}/target/jetty-context.xml</file>
                                  <todir>contexts</todir>
                                  <tofile>${build.appserver.context}.xml</tofile>
                              </configfile>
                          </configfiles>
                      </configuration>
于 2012-04-17T03:00:07.733 回答