 ------
 Introduction
 ------
 Maria Odea Ching
 Vincent Siveton
 Dennis Lundberg
 ------
 2014-09-06
 ------

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

${project.name}

 The Javadoc Plugin uses the Javadoc tool to generate javadocs for the specified project.
 For more information about the standard Javadoc tool, please refer to
 {{{http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html}Reference Guide}}.

 The Javadoc Plugin gets the parameter values that will be used from the plugin configuration specified in the pom.
 To hold all javadoc arguments, packages or files, the Javadoc Plugin generates
 {{{http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#argumentfiles}argument files}}
 and calls the Javadoc tool as follow:

+-----+
javadoc.exe(or .sh) @options @packages | @argfile
+-----+

 When no configuration values are set, the plugin sets default values instead and then executes the Javadoc tool.

 You can also use the plugin to package the generated javadocs into a jar file for distribution.

* Goals Overview

   The Javadoc Plugin has 16 goals:

   * {{{./javadoc-mojo.html}javadoc:javadoc}} generates the Javadoc files for the project. It executes the standard
     Javadoc tool and supports the parameters used by the tool.

   * {{{./test-javadoc-mojo.html}javadoc:test-javadoc}} generates the test Javadoc files for the project. It executes
     the standard Javadoc tool and supports the parameters used by the tool.

   * {{{./javadoc-no-fork-mojo.html}javadoc:javadoc-no-fork}} generates the Javadoc files for the project.
     It executes the standard Javadoc tool and supports the parameters used by the tool without forking the
     <<<generate-sources>>> phase again. Note that this goal does require generation of test sources before site generation, e.g.
     by invoking <<<mvn clean deploy site>>>.

   * {{{./test-javadoc-no-fork-mojo.html}javadoc:test-javadoc-no-fork}} generates the test Javadoc files for the project.
     It executes the standard Javadoc tool and supports the parameters used by the tool without forking the
     <<<generate-test-sources>>> phase again. Note that this goal does require generation of test sources before site generation,
     e.g. by invoking <<<mvn clean deploy site>>>.

   * {{{./aggregate-mojo.html}javadoc:aggregate}} generates the Javadoc files for an aggregator project. It executes
     the standard Javadoc tool and supports the parameters used by the tool.

   * {{{./test-aggregate-mojo.html}javadoc:test-aggregate}} generates the test Javadoc files for an aggregator project.
     It executes the standard Javadoc tool and supports the parameters used by the tool.

   * {{{./aggregate-no-fork-mojo.html}javadoc:aggregate-no-fork}} generates the Javadoc files for an aggregator project.
     It executes the standard Javadoc tool and supports the parameters used by the tool without forking the <<compile>>>
     phase again. Note that this goal does require generation of class files before site generation, e.g. by invoking
     <<<mvn compile>>> or <<<mvn install>>>.

   * {{{./test-aggregate-no-fork-mojo.html}javadoc:test-aggregate}} generates the test Javadoc files for an aggregator
     project. It executes the standard Javadoc tool and supports the parameters used by the tool without forking the
     <<<compile>>> phase again. Note that this goal does require generation of test class files before site generation,
     e.g. by invoking <<<mvn test-compile>>> or <<<mvn install>>>.

   * {{{./jar-mojo.html}javadoc:jar}} creates an archive file of the generated Javadocs. It is used during
     the release process to create the Javadoc artifact for the project's release.  This artifact is uploaded
     to the remote repository along with the project's compiled binary and source archive.

   * {{{./test-jar-mojo.html}javadoc:test-jar}} creates an archive file of the generated Test Javadocs.

   * {{{./aggregate-jar-mojo.html}javadoc:aggregate-jar}} creates an archive file of the generated Javadocs for an
     aggregator project.

   * {{{./test-aggregate-jar-mojo.html}javadoc:test-aggregate-jar}} creates an archive file of the generated Test
     Javadocs for an aggregator project.

   * {{{./fix-mojo.html}javadoc:fix}} is an interactive goal which fixes the Javadoc documentation and tags for the
     Java files.

   * {{{./test-fix-mojo.html}javadoc:test-fix}} is an interactive goal which fixes the Javadoc documentation and tags
     for the test Java files.

   * {{{./resource-bundle-mojo.html}javadoc:resource-bundle}} bundles the <<<javadocDirectory>>> along with Javadoc
     configuration options such as taglet, doclet, and link information into a deployable artifact.

   * {{{./test-resource-bundle-mojo.html}javadoc:test-resource-bundle}} bundles the <<<testJavadocDirectory>>> along
     with Javadoc configuration options such as taglet, doclet, and link information into a deployable artifact.

   []

* Usage

  General instructions on how to use the Javadoc Plugin can be found on the {{{./usage.html}usage page}}. Some more
  specific use cases are described in the examples given below.

  In case you still have questions regarding the plugin's usage, please have a look at the {{{./faq.html}FAQ}} and feel
  free to contact the {{{./mail-lists.html}user mailing list}}. The posts to the mailing list are archived and could
  already contain the answer to your question as part of an older thread. Hence, it is also worth browsing/searching
  the {{{./mail-lists.html}mail archive}}.

  If you feel like the plugin is missing a feature or has a defect, you can fill a feature request or bug report in our
  {{{./issue-tracking.html}issue tracker}}. When creating a new issue, please provide a comprehensive description of your
  concern. Especially for fixing bugs it is crucial that the developers can reproduce your problem. For this reason,
  entire debug logs, POMs or most preferably little demo projects attached to the issue are very much appreciated.
  Of course, patches are welcome, too. Contributors can check out the project from our
  {{{./source-repository.html}source repository}} and will find supplementary information in the
  {{{http://maven.apache.org/guides/development/guide-helping.html}guide to helping with Maven}}.

* Examples

   The following examples show how to use the Javadoc Plugin in more advanced usecases:

   * {{{./examples/aggregate.html}Aggregating Javadocs for Multi-Projects}}

   * {{{./examples/aggregate-dependency-sources.html}Aggregating Dependency Javadocs}}

   * {{{./examples/exclude-package-names.html}Excluding Packages}}

   * {{{./examples/group-configuration.html}Grouping Packages}}

   * {{{./examples/alternate-doclet.html}Using Alternate Doclet}}

   * {{{./examples/alternate-javadoc-tool.html}Using Alternate Javadoc Tool}}

   * {{{./examples/javadoc-resources.html}Using Javadoc Resources}}

   * {{{./examples/output-configuration.html}Using Alternative Output Directory}}

   * {{{./examples/stylesheet-configuration.html}Configuring Stylesheets}}

   * {{{./examples/help-configuration.html}Configuring Helpfile}}

   * {{{./examples/tag-configuration.html}Configuring Custom Javadoc Tags}}

   * {{{./examples/taglet-configuration.html}Configuring Custom Javadoc Taglet}}

   * {{{./examples/links-configuration.html}Configuring Links}}

   * {{{./examples/test-javadocs.html}Generating test Javadocs}}

   * {{{./examples/selective-javadocs-report.html}Selective Javadocs Reports}}

   * {{{./examples/fix-javadocs.html}Fixing Javadoc Comments}}

   * {{{./examples/javadoc-nofork.html}Generate Javadoc without duplicate execution of phase generate-sources}}

   * {{{./examples/aggregate-nofork.html}Generate aggregate Javadocs without execution of phase compile}}

   []
