 ---
 Container Goals
 ---
 Mark Hobson
 <markhobson@gmail.com>
 ---
 2011-01-10
 ---

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

Container Goals

 The plugin provides goals to retrieve various information about the Tomcat
 container:

 * {{{#Listing deployed applications}Listing deployed applications}}

 * {{{#Listing server information}Listing server information}}

 * {{{#Listing JNDI resources}Listing JNDI resources}}

 * {{{#Listing security roles}Listing security roles}}

 []

 These are described in more detail below.

* {Listing deployed applications}

 To list all the currently deployed applications in Tomcat you can type:

+--
mvn tomcat6:list
+--

* {Listing server information}

 To list information about the Tomcat version, OS, and JVM properties you can
 type:

+--
mvn tomcat6:info
+--

* {Listing JNDI resources}

 To list all the JNDI resources available within Tomcat you can type:

+--
mvn tomcat6:resources
+--

 Alternatively, to list only JNDI resources of a specific type you can type:

+--
mvn -Dmaven.tomcat.type=my.class.name tomcat6:resources
+--

* {Listing security roles}

 To list the available security roles available within Tomcat you can type:

+--
mvn tomcat6:roles
+--
