Cargo 在哪里为 Jetty 6.x 生成上下文 XML?

Posted

技术标签:

【中文标题】Cargo 在哪里为 Jetty 6.x 生成上下文 XML?【英文标题】:Where is Cargo generating context XML for Jetty 6.x? 【发布时间】:2012-04-27 14:17:28 【问题描述】:

我正在尝试实现How to specify jetty-env.xml file for Maven Cargo plugin for Jetty?中提到的解决方案

但是我面临着更根本的问题:我的 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)

【问题讨论】:

这是 CARGO 团队的 Ali Tokmen。我很高兴地宣布,这已在 cargo.codehaus.org/Configuration+files+optionEnjoy 中得到完整记录! 【参考方案1】:

我不能 100% 确定您的问题是什么,但这是货物在我的 Jetty6 系统上的作用。

Jetty 安装所在的目录不是运行时上下文和 webapp 文件所在的目录。就我而言,它们存储在 Java 临时目录中(即java.io.tmpdir)。在我的 Ubuntu 系统上,这是/tmp。在这个目录下,有一个cargo/conf 目录。在/tmp/cargo/conf 下,我有一个上下文目录,其中存储了context.xml 文件——尽管文件的实际名称从来不是context.xml,但它始终以Web 应用程序上下文命名。

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

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

【讨论】:

我之所以说这两行是为了检查是否可以看到生成 context.xml 的货物,即使我没有提供(我想看看里面最初是什么)但最后我看不到那。我想我已经提供了上下文路径(/myApp)。我可能会再试一次,看看能不能找到你提到的关于 cargo/conf 的地方。非常感谢您的帮助 不知道是不是cargo的逻辑变了...我的结果是target/下创建了cargo目录,里面有configurations/jetty6x/etc/,但是没有contexts/。在 temp 目录中,创建一个包含提取的战争内容的目录。看起来和你的观察很不一样,所以我担心之后货物发生了很大变化:( 我正在运行 Maven Cargo 插件版本 1.0.3,但我想我刚刚意识到问题出在哪里......你不能使用嵌入式 Jetty 来实现它。尝试使用独立配置。请参阅我修改后的答案。 事实上,我正准备尝试使用自动安装程序安装的 Jetty。因为我们公司的网络有点受限制,我打算用 Jetty7x 尝试这个解决方案,安装程序可以作为依赖项下载。非常感谢你的帮助。希望这次我能得到这份工作! :) 我会先尝试使用 Jetty6,因为我们知道这很有效。我也会尝试使用 1.0.3 以及我的配置来验证一切正常,然后根据需要从那里一次修改一步。如果有帮助,也可以随时投票或检查我的答案。祝你好运。

以上是关于Cargo 在哪里为 Jetty 6.x 生成上下文 XML?的主要内容,如果未能解决你的问题,请参考以下文章

Jetty 9.4.38 将受监控的路径(上下文)公开为自己的上下文

如何防止 Jetty/GAE 为不同的上下文路径创建新会话?

Rust: Cargo 使用本地 crate

Day696.Jetty如何实现具有上下文信息的责任链 -深入拆解 Tomcat & Jetty

Jetty配置虚拟目录,实现把web项目发布到自定义目录,指定指定上下文访问;jetty编码修改

rst002_rust cargo