5

我正在使用带有 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

映射到(我的附加上下文路径)的所有 URL/all-new-jx-web都没有被映射(Tomcat 不提供资产)。任何想法为什么?以下是我文件中的 tomcat 配置pom.xml文件:

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

4 回答 4

4

我有同样的问题。我尝试为外部服务器 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);
    }
}
于 2012-04-08T01:49:13.837 回答
2

您对 contextFile xml 元素的想法是正确的,但请尝试使用显式而不是使用相对路径。

<contextFile>${basedir}/config/tomcat/context.xml</contextFile>

${basedir}是您的 pom.xml 所在的文件夹。如果这对您的项目不正确,您可能需要更改此部分。

于 2012-11-26T22:51:16.323 回答
1

Use the serverXml configuration for that.

于 2011-08-08T19:14:00.693 回答
1

为了在开发模式下运行我们的应用程序,我们需要相同的东西,它使用 Apache solr。以下似乎有效:

  1. 将 solr 声明为 type=war, scope=tomcat 依赖
  2. 使用带有 addContextWarDependencies 的 tomcat maven 插件(1.1 版)
  3. 为 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/
于 2012-07-03T07:44:42.520 回答