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 的货物,即使我没有提供(我想看看里面最初是什么)但最后我看不到那。我想我已经提供了上下文路径(以上是关于Cargo 在哪里为 Jetty 6.x 生成上下文 XML?的主要内容,如果未能解决你的问题,请参考以下文章
Jetty 9.4.38 将受监控的路径(上下文)公开为自己的上下文
如何防止 Jetty/GAE 为不同的上下文路径创建新会话?
Day696.Jetty如何实现具有上下文信息的责任链 -深入拆解 Tomcat & Jetty