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

Tomcat Maven Plugin

 The Tomcat6 Maven Plugin provides goals to manipulate WAR projects within the {{{http://tomcat.apache.org/}Tomcat}} servlet container version 6.x .

* Goals Overview

  The goals for this plugin come in two categories:

  * {{{${project.url}/context-goals.html}Goals to manipulate deployed projects within Tomcat}}

  * {{{${project.url}/container-goals.html}Goals to obtain information from Tomcat}}

* Usage

  Instructions on how to use the Tomcat Maven Plugin can be found on the {{{./usage.html}usage page}}.

* Examples

  To provide you with better understanding of some usages of the Tomcat Maven Plugin,
  you can take a look into the following examples:

  * {{{./examples/add-system-properties.html}Adding System Properties}}

  * {{{./examples/deployment.html}How to deploy projects to Tomcat}}
