如何为Maven-Tomcat插件配置其他上下文路径?

时间:2011-08-08 15:09:39

标签: tomcat maven-2 maven maven-tomcat-plugin

我正在使用Maven 3.0.3和Tomcat插件。使用Maven和Tomcat,我想部署一个嵌入的站点实例。我的问题是如何在嵌入式Tomcat服务器中配置其他上下文路径?下面是我的Tomcat配置,但我的“”规范无效或该文件的内容(如下)无效......

<Context path="/all-new-jx-web" docBase="/Users/davea/Documents/workspace/NissanUSA2/Technology/nna/mycousa/jx/target/web">

因为我调用

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>

感谢任何解决方案和其他故障排除步骤, - Dave

4 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

使用serverXml配置。

答案 3 :(得分:1)

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

  1. 将solr声明为type = war,scope = tomcat dependency
  2. 将tomcat maven插件(版本1.1)与addContextWarDependencies
  3. 一起使用
  4. 为solr home添加系统属性,如下所示
  5. 然后可以运行maven,如: mvn tomcat:run 。请记住,在这种情况下,java将需要大量内存,因此在运行maven之前,请执行导出MAVEN_OPTS =&#34; -Xmx1536m -XX:MaxPermSize = 512m&#34;

    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/