Dominik
Dominik

Reputation: 4768

Deploying a War File to Tomcat Root With Maven pom.xml

Assuming the following pom.xml maven would build a client.war file which when deployed to Tomcat will have the URL www.server.com:8080/client/

What would one have to change so the application can be reached at the server root www.server.com:8080/?

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>...</groupId>
    <artifactId>client</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>...</name>
    <url>http://maven.apache.org</url>
    <build>
        <resources>
            <resource>
                <directory>target/generated-resources</directory>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            ...
        </plugins>
        <finalName>client</finalName>
    </build>
...
</project>

Upvotes: 2

Views: 15175

Answers (3)

Noremac
Noremac

Reputation: 3547

Since you're using the combination of eclipse, tomcat, and maven, I'm going to make the guess that the m2e-wtp plugin is in use here. There's a FAQ that addresses this. This also shows though how to change your context root in a maven specific way (using the war plugin for specifying a finalName for the war) which results in a correctly named war file (such as ROOT.war as mentioned in other answers.

Upvotes: 2

vitorrrr
vitorrrr

Reputation: 70

Maven war plugin (which is defined on super-pom by default) will only generate a war file. It's up to you to set up your app on Tomcat. If you want to add the "deploy to a container" to your maven build, go with Tomcat Maven Plugin or Cargo Maven Plugin.

What you want has nothing to do with Maven, actually. Setting your war name to ROOT.war should do it (<finalName>ROOT</finalName> on your build section), but if you want to add your context.xml to the war file, you could do something like (assuming src/main/webapp is your webapp folder defined by maven):

`<plugin>
<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-war-plugin</artifactId>  
        <configuration>  
          <webResources>  
            <webResource>  
              <directory>${basedir}/src/main/webapp/META-INF</directory>  
              <includes>  
                <include>context.xml</include>  
              </includes>  
              <targetPath>META-INF</targetPath>  
              <filtering>true</filtering>  
            </webResource>  
          </webResources>  
        </configuration>  
      </plugin>  

`

Upvotes: 0

user944849
user944849

Reputation: 14951

I believe you can leave the war named client.war if you'd like. Then configure the tomcat6 plugin, setting the path like this:

<plugin>
  <groupId>org.apache.tomcat.maven</groupId>
  <artifactId>tomcat6-maven-plugin</artifactId>
  <version>2.0-beta-1</version>
      <!-- put the configuration in an execution if you want to... -->
      <configuration>
        <path>/</path>
        <warFile>${project.build.directory}/client.war</warFile>
        <!-- other config options here -->
      </configuration>
</plugin>

I haven't used tomcat7 version of the plugin, but I'm guessing it's similar.

Upvotes: 8

Related Questions