<?xml version="1.0"?>

<!--
/*
 * 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.
 */
-->

<document xmlns="http://maven.apache.org/XDOC/2.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">

  <properties>
    <title>Introduction</title>
    <author>Vincent Siveton</author>
    <author email="hboutemy_AT_apache_DOT_org">Hervé Boutemy</author>
  </properties>

  <body>

    <section name="Maven Plugin Tools">

      <p>The Maven Plugin Tools contains the necessary tools to generate repetitive content such as descriptor,
      help, and documentation.</p>

      <p>
        <img src="images/plugin-tools-deps.png" width="759" height="474" border="0" usemap="#PluginTools_dependencies" />
        <map name="PluginTools_dependencies">
          <area shape="rect" coords="256,0,467,34"    alt="maven-plugin-plugin"      href="./maven-plugin-plugin" />
          <area shape="rect" coords="28,95,205,131"   alt="plugin-tools-api"         href="./maven-plugin-tools-api"/>
          <area shape="rect" coords="287,154,496,190" alt="plugin-tools-javadoc"     href="./maven-plugin-tools-javadoc"/>
          <area shape="rect" coords="44,146,508,198"  alt="plugin-tools-java"        href="./maven-plugin-tools-java"/>
          <area shape="rect" coords="311,213,496,248" alt="plugin-annotations"       href="./maven-plugin-annotations"/>
          <area shape="rect" coords="44,204,508,256"  alt="plugin-tools-annotations" href="./maven-plugin-tools-annotations"/>
          <area shape="rect" coords="55,270,293,306"  alt="plugin-tools-beanshell"   href="./maven-script/maven-plugin-tools-beanshell"/>
          <area shape="rect" coords="319,271,557,306" alt="maven-script-beanshell"   href="./maven-script/maven-script-beanshell"/>
          <area shape="rect" coords="56,329,223,365"  alt="plugin-tools-ant"         href="./maven-script/maven-plugin-tools-ant"/>
          <area shape="rect" coords="388,329,557,365" alt="maven-script-ant"         href="./maven-script/maven-script-ant"/>
          <area shape="rect" coords="48,388,231,424"  alt="plugin-tools-model"       href="./maven-script/maven-plugin-tools-model"/>
          <area shape="rect" coords="514,95,759,131"  alt="plugin-tools-generators"  href="./maven-plugin-tools-generators"/>
          <area shape="rect" coords="44,263,570,432"  alt="maven-script"             href="./maven-script"/>
          <area shape="rect" coords="340,438,529,474" alt="maven-plugin-api"         href="/ref/current/maven-plugin-api/"/>
          <area shape="rect" coords="510,154,582,190" alt="qdox"                     href="https://github.com/paul-hammant/qdox"/>
          <area shape="rect" coords="510,212,583,248" alt="asm"                      href="https://asm.ow2.org/"/>
          <area shape="rect" coords="656,134,747,169" alt="Doxia"                    href="/doxia/"/>
          <area shape="rect" coords="599,271,715,306" alt="Beanshell"                href="http://www.beanshell.org/"/>
          <area shape="rect" coords="600,329,670,366" alt="Ant"                      href="https://ant.apache.org/"/>
        </map>
      </p>

      <table>
        <tr><th><b>Module</b></th><th><b>Overview</b></th></tr>
        <tr>
          <td><b><a href="./maven-plugin-plugin/index.html">maven-plugin-plugin</a></b></td>
          <td>Create a Maven plugin descriptor for any mojos found in the source tree, generate reports, create help goal.</td>
        </tr>
        <tr>
          <td><b><a href="./maven-plugin-report-plugin/index.html">maven-plugin-report-plugin</a></b></td>
          <td>The Plugin Report Plugin is used to create reports about the plugin being built.</td>
        </tr>
        <tr>
          <td><a href="./maven-plugin-tools-generators/index.html">maven-plugin-tools-generators</a></td>
          <td>Generators (XML descriptor, help, documentation), used by maven-plugin-plugin to generate content from descriptor extracted from sources.</td>
        </tr>
        <tr>
          <td><a href="./maven-plugin-tools-api/index.html">maven-plugin-tools-api</a></td>
          <td>Extractor API, used by maven-plugin-plugin to extract Mojo information.</td>
        </tr>
        <tr>
          <td>&nbsp;&nbsp;<a href="./maven-plugin-tools-java/index.html">maven-plugin-tools-java</a></td>
          <td>Extractor for plugins written in Java annotated with Mojo Javadoc Tags.</td>
        </tr>
        <tr>
          <td>&nbsp;&nbsp;&nbsp;&nbsp;<a href="./maven-plugin-tools-javadoc/index.html">maven-plugin-tools-javadoc</a></td>
          <td>Provides doclets to support Mojo Javadoc Tags in the Javadoc Tool.</td>
        </tr>
        <tr>
          <td>&nbsp;&nbsp;<a href="./maven-plugin-tools-annotations/index.html">maven-plugin-tools-annotations</a></td>
          <td>Extractor for plugins written in Java with Java annotations.</td>
        </tr>
        <tr>
          <td>&nbsp;&nbsp;&nbsp;&nbsp;<a href="./maven-plugin-annotations/index.html">maven-plugin-annotations</a></td>
          <td>Provides the Java annotations to use in Mojos.</td>
        </tr>
        <tr>
          <td><a href="./maven-script/index.html">maven-script</a></td>
          <td>Maven Script Mojo Support lets developer write Maven plugins/goals with scripting languages instead of compiled Java.</td>
        </tr>
        <tr>
          <td>&nbsp;&nbsp;<a href="./maven-script/maven-plugin-tools-beanshell/index.html">maven-plugin-tools-beanshell</a></td>
          <td>Extractor for plugins written in Beanshell.</td>
        </tr>
        <tr>
          <td>&nbsp;&nbsp;<a href="./maven-script/maven-script-beanshell/index.html">maven-script-beanshell</a></td>
          <td>Maven Beanshell Mojo Support, ie write Maven plugins with Beanshell scripts.</td>
        </tr>
        <tr>
          <td>&nbsp;&nbsp;<a href="./maven-script/maven-plugin-tools-ant/index.html">maven-plugin-tools-ant</a></td>
          <td>Extractor for plugins written in Ant.</td>
        </tr>
        <tr>
          <td>&nbsp;&nbsp;<a href="./maven-script/maven-script-ant/index.html">maven-script-ant</a></td>
          <td>Maven Ant Mojo Support, ie write Maven plugins with Ant script.</td>
        </tr>
        <tr>
          <td>&nbsp;&nbsp;<a href="./maven-script/maven-plugin-tools-model/index.html">maven-plugin-tools-model</a></td>
          <td>Plugin Metadata Model for script-based plugins.</td>
        </tr>
      </table>

      <subsection name="Plugin Descriptors">
        <p>The plugin descriptor is first being generated in memory finally containing some values in HTML format before being persisted into three different XML files.
        The formats differ in
          <ul>
            <li>whether they contain all elements or just a limited set of elements defined by the <a href="https://maven.apache.org/ref/current/maven-plugin-api/plugin.html">Plugin Descriptor Spec</a></li>
            <li>whether descriptive elements contain HTML or plain text values</li>
            <li>whether they are packaged in the resulting JAR or not</li>
          </ul>
        Javadoc tags are in general being resolved and replaced by their XHTML value before they end up in the according plugin descriptor attributes <code>description</code> and <code>deprecated</code>.
        Also javadoc code links via <code>{@link}</code> or <code>@see</code> are replaced by links to the according Javadoc pages if configured accordingly.
        Plaintext is afterwards being generated out of the XHTML (where most XHTML element are just stripped and links are emitted inside angle brackets).
        </p>
        <table>
          <tr>
            <th>File name</th>
            <th>Allows HTML</th>
            <th>Limited Elements</th>
            <th>Contained in JAR</th>
          </tr>
          <tr>
            <td>plugin.xml</td>
            <td>no</td>
            <td>no</td>
            <td>yes</td>
          </tr>
          <tr>
            <td>plugin-help.xml</td>
            <td>no</td>
            <td>yes</td>
            <td>yes</td>
          </tr>
          <tr>
            <td>plugin-enhanced.xml</td>
            <td>no</td>
            <td>yes</td>
            <td>no (volatile file)</td>
          </tr>
        </table>
        <p>
          <img src="images/plugin-descriptors.svg" width="759" border="0" />
        </p>
      </subsection>

      <subsection name="See Also">
        <ul>
          <li><a href="/plugin-testing/">Maven Plugin Testing</a></li>
          <li><a href="/ref/current/maven-plugin-api/">Maven Plugin API</a></li>
        </ul>
      </subsection>

    </section>

  </body>

</document>
