如何为 tomcat-maven-plugin 配置额外的上下文路径?
Posted
技术标签:
【中文标题】如何为 tomcat-maven-plugin 配置额外的上下文路径?【英文标题】:How do I configure an additional context path for tomcat-maven-plugin? 【发布时间】:2011-10-22 11:47:22 【问题描述】:我正在使用带有 Tomcat 插件的 Maven 3.0.3。使用 Maven 和 Tomcat,我想部署该站点的嵌入式实例。我的问题是如何在我的嵌入式 Tomcat 服务器中配置额外的上下文路径?以下是我的 Tomcat 配置,但我的 <contextFile>
规范无效或该文件的内容(如下)无效:
<Context path="/all-new-jx-web" docBase="/Users/davea/Documents/workspace/NissanUSA2/Technology/nna/mycousa/jx/target/web">
</Context>
因为当我调用时
mvn clean -Dmaven.test.skip=true verify -Ptomcat tomcat:run
映射到/all-new-jx-web
(我的附加上下文路径)的所有 URL 都没有被映射(Tomcat 不提供资产)。任何想法为什么?以下是我 pom.xml
文件中的 tomcat 配置文件:
<profile>
<id>tomcat</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<contextFile>config/tomcat/context.xml</contextFile>
<mode>context</mode>
<addContextWarDependencies>true</addContextWarDependencies>
<charset>UTF-8</charset>
<path>/all-new-jx</path>
<update>true</update>
<warDirectory>target/$project.artifactId-$project.version.$project.packaging</warDirectory>
<systemProperties>
<JAVA_OPTS>-Xms256m -Xmx512m -XX:MaxPermSize=256m -XX:NewRatio=6
-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled
-verbose:gc"
</JAVA_OPTS>
</systemProperties>
</configuration>
</plugin>
</plugins>
</build>
</profile>
【问题讨论】:
【参考方案1】:我遇到了同样的问题。我尝试为外部服务器 xml 提供位置,但我可以让我的项目运行。最终,我修改了 tomcat 插件代码以包含额外的静态上下文路径。
// Snippet from AbstractRunMojo.java
String appBase = new File(configurationDir, "webapps")
.getAbsolutePath();
Host host = container.createHost("localHost", appBase);
host.addChild(context);
// Adding static context
createStaticContext(container, context, host);//More code after this
private void createStaticContext(final Embedded container, Context context,
Host host)
if (null != staticContextDocbase)
Context ctx1 = container.createContext(staticContextPath,
staticContextDocbase);
ctx1.setPrivileged(true);
Wrapper servlet = context.createWrapper();
servlet.setServletClass(DefaultServlet.class.getName());
servlet.setName("staticContent");
ctx1.addChild(servlet);
ctx1.addServletMapping("/", "staticContent");
host.addChild(ctx1);
【讨论】:
【参考方案2】:您对 contextFile xml 元素的想法是正确的,但请尝试使用显式而不是使用相对路径。
<contextFile>$basedir/config/tomcat/context.xml</contextFile>
$basedir
是您的 pom.xml 所在的文件夹。如果这对您的项目不正确,您可能需要更改此部分。
【讨论】:
【参考方案3】:为此使用serverXml
配置。
【讨论】:
您能举个例子吗?我读到的关于 server.xml 的所有内容都表明它不是您为资源添加额外上下文路径的地方。 是的,您正在阅读错误的来源。文档说“使用 server.xml 注意如果你使用这个,你必须在这个文件中配置你的 webapp 路径。” This 是默认的server.xml
。您将contexts 放入Host
元素中。【参考方案4】:
为了在开发模式下运行使用 Apache solr 的应用程序,我们需要相同的功能。以下似乎有效:
-
将 solr 声明为 type=war, scope=tomcat 依赖项
使用带有 addContextWarDependencies 的 tomcat maven 插件(1.1 版)
为 solr home 添加系统属性,如下例所示
然后可以像这样运行 maven:mvn tomcat:run。请记住,在这种情况下 java 将需要大量内存,因此在运行 maven 之前,请执行 export MAVEN_OPTS="-Xmx1536m -XX:MaxPermSize=512m" 例如。
pom.xml 就像,我们假设其中有一些属性 -包括一个名为 solr.home 的属性- 从配置文件中读取:
<project>
...
<dependencies>
...
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr</artifactId>
<version>3.3.0</version>
<type>war</type>
<scope>tomcat</scope>
</dependency>
</dependencies>
<build>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<addContextWarDependencies>true</addContextWarDependencies>
<systemProperties>
<property.you.need>$example.property.yours</property.you.need>
<solr.solr.home>$solr.home</solr.solr.home>
</systemProperties>
</configuration>
</plugin>
...
</build>
</project>
然后可以通过以下方式访问 Solr:
http://localhost:8080/solr/admin
和你的应用程序在
http://localhost:8080/your-app-id/
【讨论】:
tomcat
不是范围的可能值。可能的值只有provided
、compile
、runtime
、test
、system
以上是关于如何为 tomcat-maven-plugin 配置额外的上下文路径?的主要内容,如果未能解决你的问题,请参考以下文章
Maven:将生成的 tomcat-maven-plugin 资源放在哪里?