 ---
 Deployment
 ---
 Mark Hobson
 <markhobson@gmail.com>
 ---
 2010-02-15
 ---

 ~~ Licensed to the Apache Software Foundation (ASF) under one
 ~~ or more contributor license agreements.  See the NOTICE file
 ~~ distributed with this work for additional information
 ~~ regarding copyright ownership.  The ASF licenses this file
 ~~ to you under the Apache License, Version 2.0 (the
 ~~ "License"); you may not use this file except in compliance
 ~~ with the License.  You may obtain a copy of the License at
 ~~
 ~~   http://www.apache.org/licenses/LICENSE-2.0
 ~~
 ~~ Unless required by applicable law or agreed to in writing,
 ~~ software distributed under the License is distributed on an
 ~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ~~ KIND, either express or implied.  See the License for the
 ~~ specific language governing permissions and limitations
 ~~ under the License.

 ~~ NOTE: For help with the syntax of this file, see:
 ~~ http://maven.apache.org/doxia/references/apt-format.html

Deployment

 The plugin provides various methods of deployment to Tomcat:

 * {{{#Deploying_a_WAR_file}Deploying a WAR file}}

 * {{{#Deploying_an_exploded_WAR_directory}Deploying an exploded WAR directory}},
   with an optional <<<context.xml>>> file

 * {{{#Deploying_an_in-place_WAR_directory}Deploying an in-place WAR directory}},
   with an optional <<<context.xml>>> file

 * {{{#Deploying_a_context.xml_file}Deploying a <<<context.xml>>> file}}

 * {{{#Running_a_WAR_project}Running a WAR project}}

 []

 These are described in more detail below.

* {Deploying a WAR file}

 The simplest way to deploy a WAR project to Tomcat is to type:

+--
mvn tomcat:deploy
+--

 This goal will assemble and deploy the WAR file to Tomcat's manager using
 HTTP PUT.

** Using a different WAR file location

 To specify a different WAR file location, add a plugin configuration block to
 your <<<pom.xml>>> as follows:

+--
<project>
  ...
  <build>
    ...
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat6-maven-plugin</artifactId>
        <version>${project.version}</version>
        <configuration>
          <warFile>path/to/my/warFile.war</warFile>
        </configuration>
      </plugin>
      ...
    </plugins>
    ...
  </build>
  ...
</project>
+--

 The default location is
 <<<$\{project.build.directory\}/$\{project.build.finalName\}.war>>>.

** Using a <<<context.xml>>> file

 If you need to specify a <<<context.xml>>> file when deploying a WAR file to
 Tomcat, then it must be included within the WAR.  The simplest way to achieve
 this is by adding it to your webapp resources:

+--
src
|_ main
   |_ webapp
      |_ META-INF
         |_ context.xml
+--

* {Deploying an exploded WAR directory}

 To avoid building a WAR file upon deployment, a WAR directory can instead be
 deployed to Tomcat by typing:

+--
mvn war:exploded tomcat:exploded
+--

** Using a different WAR directory location

 To specify a different WAR directory location, add a plugin configuration
 block to your <<<pom.xml>>> as follows:

+--
<project>
  ...
  <build>
    ...
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat6-maven-plugin</artifactId>
        <version>${project.version}</version>
        <configuration>
          <warDirectory>path/to/my/warDir</warDirectory>
        </configuration>
      </plugin>
      ...
    </plugins>
    ...
  </build>
  ...
</project>
+--

 The default location is
 <<<$\{project.build.directory\}/$\{project.build.finalName\}>>>.

** Using a <<<context.xml>>> file

 To supply a <<<context.xml>>> when deploying a WAR directory, add a plugin
 configuration block to your <<<pom.xml>>> as follows:

+--
<project>
  ...
  <build>
    ...
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat6-maven-plugin</artifactId>
        <version>${project.version}</version>
        <configuration>
          <mode>both</mode>
        </configuration>
      </plugin>
      ...
    </plugins>
    ...
  </build>
  ...
</project>
+--

 The default <<<context.xml>>> file use is located at
 <<<src/main/webapp/META-INF/context.xml>>>.

** Using a different <<<context.xml>>> file location

 To specify a different <<<context.xml>>> file location, add a plugin
 configuration block to your <<<pom.xml>>> as follows:

+--
<project>
  ...
  <build>
    ...
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat6-maven-plugin</artifactId>
        <version>${project.version}</version>
        <configuration>
          <contextFile>path/to/my/contextFile.xml</contextFile>
        </configuration>
      </plugin>
      ...
    </plugins>
    ...
  </build>
  ...
</project>
+--

 The default location is
 <<<$\{project.build.directory\}/$\{project.build.finalName\}/META-INF/context.xml>>>.

* {Deploying an in-place WAR directory}

 To avoid copying resources to the build directory, the webapp source directory
 can be deployed to Tomcat by typing:

+--
mvn war:inplace tomcat:inplace
+--

** Using a different WAR directory location

 To specify a different WAR directory location, add a plugin configuration
 block to your <<<pom.xml>>> as follows:

+--
<project>
  ...
  <build>
    ...
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat6-maven-plugin</artifactId>
        <version>${project.version}</version>
        <configuration>
          <warSourceDirectory>path/to/my/warSourceDir</warSourceDirectory>
        </configuration>
      </plugin>
      ...
    </plugins>
    ...
  </build>
  ...
</project>
+--

 The default location is <<<$\{basedir\}/src/main/webapp>>>.

** Using a <<<context.xml>>> file

 To supply a <<<context.xml>>> when deploying a WAR directory to Tomcat, add a
 plugin configuration block to your <<<pom.xml>>> as follows:

+--
<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat6-maven-plugin</artifactId>
        <version>${project.version}</version>
        <configuration>
          <mode>both</mode>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>
+--

 The default <<<context.xml>>> file used is located at
 <<<src/main/webapp/META-INF/context.xml>>>.

** Using a different <<<context.xml>>> file location

 To specify a different <<<context.xml>>> file location, add a plugin
 configuration block to your <<<pom.xml>>> as follows:

+--
<project>
  ...
  <build>
    ...
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat6-maven-plugin</artifactId>
        <version>${project.version}</version>
        <configuration>
          <contextFile>path/to/my/contextFile.xml</contextFile>
        </configuration>
      </plugin>
      ...
    </plugins>
    ...
  </build>
  ...
</project>
+--

 The default location is
 <<<$\{project.build.directory\}/$\{project.build.finalName\}/META-INF/context.xml>>>.

* {Deploying a context.xml file}

 To simply deploy just a <<<context.xml>>> file to Tomcat:

 [[1]] Add a plugin configuration block to your <<<pom.xml>>> as follows:

+--
<project>
  ...
  <build>
    ...
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat6-maven-plugin</artifactId>
        <version>${project.version}</version>
        <configuration>
          <mode>context</mode>
        </configuration>
      </plugin>
      ...
    </plugins>
    ...
  </build>
  ...
</project>
+--

 [[2]] Deploy the <<<context.xml>>> file by typing:

+--
mvn tomcat:deploy
+--

 []

 The default <<<context.xml>>> file used is located at
 <<<src/main/webapp/META-INF/context.xml>>>.

** Using a different <<<context.xml>>> file location

 To specify a different <<<context.xml>>> file location, add a plugin
 configuration block to your <<<pom.xml>>> as follows:

+--
<project>
  ...
  <build>
    ...
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat6-maven-plugin</artifactId>
        <version>${project.version}</version>
        <configuration>
          <contextFile>path/to/my/contextFile.xml</contextFile>
        </configuration>
      </plugin>
      ...
    </plugins>
    ...
  </build>
  ...
</project>
+--

 The default location is
 <<<$\{project.build.directory\}/$\{project.build.finalName\}/META-INF/context.xml>>>.

* {Running a WAR project}

 A WAR project can be run under an embedded Tomcat server by typing:

+--
mvn tomcat:run
+--

 To stop the embedded server, press <<<CTRL+C>>>.
