Added: 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java?rev=1801772&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java
 (added)
+++ 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java
 Wed Jul 12 19:59:51 2017
@@ -0,0 +1,6049 @@
+package org.apache.maven.plugins.javadoc;
+
+/*
+ * 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.
+ */
+
+import static org.apache.maven.plugins.javadoc.JavadocUtil.isEmpty;
+import static org.apache.maven.plugins.javadoc.JavadocUtil.isNotEmpty;
+import static org.apache.maven.plugins.javadoc.JavadocUtil.toList;
+import static org.apache.maven.plugins.javadoc.JavadocUtil.toRelative;
+import static org.codehaus.plexus.util.IOUtil.close;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.ClassUtils;
+import org.apache.commons.lang3.JavaVersion;
+import org.apache.commons.lang3.SystemUtils;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.Resource;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.plugins.javadoc.options.BootclasspathArtifact;
+import org.apache.maven.plugins.javadoc.options.DocletArtifact;
+import org.apache.maven.plugins.javadoc.options.Group;
+import org.apache.maven.plugins.javadoc.options.JavadocOptions;
+import org.apache.maven.plugins.javadoc.options.JavadocPathArtifact;
+import org.apache.maven.plugins.javadoc.options.OfflineLink;
+import org.apache.maven.plugins.javadoc.options.ResourcesArtifact;
+import org.apache.maven.plugins.javadoc.options.Tag;
+import org.apache.maven.plugins.javadoc.options.Taglet;
+import org.apache.maven.plugins.javadoc.options.TagletArtifact;
+import 
org.apache.maven.plugins.javadoc.options.io.xpp3.JavadocOptionsXpp3Writer;
+import org.apache.maven.plugins.annotations.Component;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.plugins.javadoc.resolver.JavadocBundle;
+import org.apache.maven.plugins.javadoc.resolver.ResourceResolver;
+import org.apache.maven.plugins.javadoc.resolver.SourceResolverConfig;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuilder;
+import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
+import org.apache.maven.reporting.MavenReportException;
+import org.apache.maven.settings.Proxy;
+import org.apache.maven.settings.Settings;
+import org.apache.maven.shared.artifact.DefaultArtifactCoordinate;
+import org.apache.maven.shared.artifact.filter.resolve.AndFilter;
+import org.apache.maven.shared.artifact.filter.resolve.PatternExclusionsFilter;
+import org.apache.maven.shared.artifact.filter.resolve.PatternInclusionsFilter;
+import org.apache.maven.shared.artifact.filter.resolve.ScopeFilter;
+import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
+import org.apache.maven.shared.artifact.resolve.ArtifactResolverException;
+import org.apache.maven.shared.artifact.resolve.ArtifactResult;
+import org.apache.maven.shared.dependencies.DefaultDependableCoordinate;
+import org.apache.maven.shared.dependencies.resolve.DependencyResolver;
+import 
org.apache.maven.shared.dependencies.resolve.DependencyResolverException;
+import org.apache.maven.shared.invoker.MavenInvocationException;
+import org.apache.maven.toolchain.Toolchain;
+import org.apache.maven.toolchain.ToolchainManager;
+import org.apache.maven.wagon.PathUtils;
+import org.codehaus.plexus.archiver.ArchiverException;
+import org.codehaus.plexus.archiver.UnArchiver;
+import org.codehaus.plexus.archiver.manager.ArchiverManager;
+import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
+import 
org.codehaus.plexus.components.io.fileselectors.IncludeExcludeFileSelector;
+import org.codehaus.plexus.util.DirectoryScanner;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.WriterFactory;
+import org.codehaus.plexus.util.cli.CommandLineException;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/**
+ * Base class with majority of Javadoc functionalities.
+ *
+ * @author <a href="mailto:br...@apache.org";>Brett Porter</a>
+ * @author <a href="mailto:vincent.sive...@gmail.com";>Vincent Siveton</a>
+ * @version $Id: AbstractJavadocMojo.java 1801354 2017-07-09 08:49:46Z 
rfscholte $
+ * @see <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html";>
+ *      The Java API Documentation Generator, 7</a>
+ * @since 2.0
+ */
+public abstract class AbstractJavadocMojo
+    extends AbstractMojo
+{
+    /**
+     * Classifier used in the name of the javadoc-options XML file, and in the 
resources bundle
+     * artifact that gets attached to the project. This one is used for 
non-test javadocs.
+     *
+     * @see #TEST_JAVADOC_RESOURCES_ATTACHMENT_CLASSIFIER
+     * @since 2.7
+     */
+    public static final String JAVADOC_RESOURCES_ATTACHMENT_CLASSIFIER = 
"javadoc-resources";
+
+    /**
+     * Classifier used in the name of the javadoc-options XML file, and in the 
resources bundle
+     * artifact that gets attached to the project. This one is used for 
test-javadocs.
+     *
+     * @see #JAVADOC_RESOURCES_ATTACHMENT_CLASSIFIER
+     * @since 2.7
+     */
+    public static final String TEST_JAVADOC_RESOURCES_ATTACHMENT_CLASSIFIER = 
"test-javadoc-resources";
+
+    /**
+     * The default Javadoc API urls according the
+     * <a 
href="http://www.oracle.com/technetwork/java/javase/documentation/api-jsp-136079.html";>Sun
 API
+     * Specifications</a>:
+     * <pre>
+     * &lt;javaApiLinks&gt;
+     *   &lt;property&gt;
+     *     &lt;name&gt;api_1.3&lt;/name&gt;
+     *     
&lt;value&gt;http://docs.oracle.com/javase/1.3/docs/api/&lt;/value&gt;
+     *   &lt;/property&gt;
+     *   &lt;property&gt;
+     *     &lt;name&gt;api_1.4&lt;/name&gt;
+     *     
&lt;value&gt;http://docs.oracle.com/javase/1.4.2/docs/api/&lt;/value&gt;
+     *   &lt;/property&gt;
+     *   &lt;property&gt;
+     *     &lt;name&gt;api_1.5&lt;/name&gt;
+     *     
&lt;value&gt;http://docs.oracle.com/javase/1.5.0/docs/api/&lt;/value&gt;
+     *   &lt;/property&gt;
+     *   &lt;property&gt;
+     *     &lt;name&gt;api_1.6&lt;/name&gt;
+     *     &lt;value&gt;http://docs.oracle.com/javase/6/docs/api/&lt;/value&gt;
+     *   &lt;/property&gt;
+     *   &lt;property&gt;
+     *     &lt;name&gt;api_1.7&lt;/name&gt;
+     *     &lt;value&gt;http://docs.oracle.com/javase/7/docs/api/&lt;/value&gt;
+     *   &lt;/property&gt;
+     *   &lt;property&gt;
+     *     &lt;name&gt;api_1.8&lt;/name&gt;
+     *     &lt;value&gt;http://docs.oracle.com/javase/8/docs/api/&lt;/value&gt;
+     *   &lt;/property&gt;
+     * &lt;/javaApiLinks&gt;
+     * </pre>
+     *
+     * @since 2.6
+     */
+    public static final Properties DEFAULT_JAVA_API_LINKS = new Properties();
+
+    /**
+     * The Javadoc script file name when <code>debug</code> parameter is on, 
i.e. javadoc.bat or javadoc.sh
+     */
+    protected static final String DEBUG_JAVADOC_SCRIPT_NAME = "javadoc." + ( 
SystemUtils.IS_OS_WINDOWS ? "bat" : "sh" );
+
+    /**
+     * The <code>options</code> file name in the output directory when calling:
+     * <code>javadoc.exe(or .sh) &#x40;options &#x40;packages | &#x40;argfile 
| &#x40;files</code>
+     */
+    protected static final String OPTIONS_FILE_NAME = "options";
+
+    /**
+     * The <code>packages</code> file name in the output directory when 
calling:
+     * <code>javadoc.exe(or .sh) &#x40;options &#x40;packages | &#x40;argfile 
| &#x40;files</code>
+     */
+    protected static final String PACKAGES_FILE_NAME = "packages";
+
+    /**
+     * The <code>argfile</code> file name in the output directory when calling:
+     * <code>javadoc.exe(or .sh) &#x40;options &#x40;packages | &#x40;argfile 
| &#x40;files</code>
+     */
+    protected static final String ARGFILE_FILE_NAME = "argfile";
+
+    /**
+     * The <code>files</code> file name in the output directory when calling:
+     * <code>javadoc.exe(or .sh) &#x40;options &#x40;packages | &#x40;argfile 
| &#x40;files</code>
+     */
+    protected static final String FILES_FILE_NAME = "files";
+
+    /**
+     * The current class directory
+     */
+    private static final String RESOURCE_DIR = ClassUtils.getPackageName( 
JavadocReport.class ).replace( '.', '/' );
+
+    /**
+     * Default css file name
+     */
+    private static final String DEFAULT_CSS_NAME = "stylesheet.css";
+
+    /**
+     * Default location for css
+     */
+    private static final String RESOURCE_CSS_DIR = RESOURCE_DIR + "/css";
+
+    /**
+     * For Javadoc options appears since Java 1.4.
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.4.1.html#summary";>
+     * What's New in Javadoc 1.4</a>
+     *
+     * @since 2.1
+     */
+    private static final JavadocVersion SINCE_JAVADOC_1_4 = 
JavadocVersion.parse( "1.4" );
+
+    /**
+     * For Javadoc options appears since Java 1.4.2.
+     * See <a
+     * 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.4.2.html#commandlineoptions";>
+     * What's New in Javadoc 1.4.2</a>
+     *
+     * @since 2.1
+     */
+    private static final JavadocVersion SINCE_JAVADOC_1_4_2 = 
JavadocVersion.parse( "1.4.2" );
+
+    /**
+     * For Javadoc options appears since Java 5.0.
+     * See <a
+     * 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.5.0.html#commandlineoptions";>
+     * What's New in Javadoc 5.0</a>
+     *
+     * @since 2.1
+     */
+    private static final JavadocVersion SINCE_JAVADOC_1_5 = 
JavadocVersion.parse( "1.5" );
+
+    /**
+     * For Javadoc options appears since Java 6.0.
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/index.html";>
+     * Javadoc Technology</a>
+     *
+     * @since 2.4
+     */
+    private static final JavadocVersion SINCE_JAVADOC_1_6 = 
JavadocVersion.parse( "1.6" );
+
+    /**
+     * For Javadoc options appears since Java 8.0.
+     * See <a 
href="http://docs.oracle.com/javase/8/docs/technotes/guides/javadoc/index.html";>
+     * Javadoc Technology</a>
+     *
+     * @since 3.0.0
+     */
+    private static final JavadocVersion SINCE_JAVADOC_1_8 = 
JavadocVersion.parse( "1.8" );
+
+    /**
+     * 
+     */
+    private static final JavadocVersion JAVA_VERSION = JavadocVersion.parse( 
SystemUtils.JAVA_VERSION );
+
+    // ----------------------------------------------------------------------
+    // Mojo components
+    // ----------------------------------------------------------------------
+
+    /**
+     * Archiver manager
+     *
+     * @since 2.5
+     */
+    @Component
+    private ArchiverManager archiverManager;
+
+    /**
+     * Factory for creating artifact objects
+     */
+    @Component
+    private ArtifactFactory factory;
+
+    /**
+     * Used to resolve artifacts of aggregated modules
+     *
+     * @since 2.1
+     */
+    @Component
+    private ArtifactMetadataSource artifactMetadataSource;
+
+    /**
+     * Used for resolving artifacts
+     */
+    @Component
+    private ArtifactResolver resolver;
+
+    @Component
+    private ResourceResolver resourceResolver;
+
+    @Component
+    private org.apache.maven.shared.artifact.resolve.ArtifactResolver 
artifactResolver;
+
+    @Component
+    private ArtifactHandlerManager artifactHandlerManager;
+
+    @Component
+    private DependencyResolver dependencyResolver;
+
+    /**
+     * Project builder
+     *
+     * @since 3.0
+     */
+    @Component
+    private ProjectBuilder mavenProjectBuilder;
+
+    /** */
+    @Component
+    private ToolchainManager toolchainManager;
+
+    // ----------------------------------------------------------------------
+    // Mojo parameters
+    // ----------------------------------------------------------------------
+
+    /**
+     * The current build session instance. This is used for
+     * toolchain manager API calls.
+     */
+    @Parameter( defaultValue = "${session}", readonly = true, required = true )
+    protected MavenSession session;
+
+    /**
+     * The Maven Settings.
+     *
+     * @since 2.3
+     */
+    @Parameter( defaultValue = "${settings}", readonly = true, required = true 
)
+    private Settings settings;
+
+    /**
+     * The Maven Project Object
+     */
+    @Parameter( defaultValue = "${project}", readonly = true, required = true )
+    protected MavenProject project;
+
+    @Parameter( defaultValue = "${plugin}", readonly = true )
+    private PluginDescriptor plugin;
+
+    /**
+     * Specify if the Javadoc should operate in offline mode.
+     */
+    @Parameter( defaultValue = "${settings.offline}", required = true, 
readonly = true )
+    private boolean isOffline;
+
+    /**
+     * Specifies the Javadoc resources directory to be included in the Javadoc 
(i.e. package.html, images...).
+     * <br/>
+     * Could be used in addition of <code>docfilessubdirs</code> parameter.
+     * <br/>
+     * See <a href="#docfilessubdirs">docfilessubdirs</a>.
+     *
+     * @see #docfilessubdirs
+     * @since 2.1
+     */
+    @Parameter( defaultValue = "${basedir}/src/main/javadoc" )
+    private File javadocDirectory;
+
+    /**
+     * Set an additional parameter(s) on the command line. This value should 
include quotes as necessary for
+     * parameters that include spaces. Useful for a custom doclet.
+     *
+     * @deprecated Does not properly support multiple options at once and has 
a bad name
+     */
+    @Parameter( property = "additionalparam" )
+    @Deprecated
+    private String additionalparam;
+
+    /**
+     * Set an additional Javadoc option(s) (i.e. JVM options) on the command 
line.
+     * Example:
+     * <pre>
+     * &lt;additionalJOption&gt;-J-Xss128m&lt;/additionalJOption&gt;
+     * </pre>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#J";>Jflag</a>.
+     * <br/>
+     * See <a 
href="http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp";>vmoptions</a>.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html";>Networking
+     * Properties</a>.
+     *
+     * @since 2.3
+     */
+    @Parameter( property = "additionalJOption" )
+    private String additionalJOption;
+
+    /**
+     * Set additional JVM options for the execution of the javadoc command via 
the '-J' option to javadoc.
+     * Example:
+     * <pre>
+     *     &lt;additionalJOptions&gt;
+     *         &lt;additionalJOption&gt;-J-Xmx1g &lt;/additionalJOption&gt;
+     *     &lt;/additionalJOptions&gt;
+     * </pre>
+     * @since 2.9
+     */
+    @Parameter
+    private String[] additionalJOptions;
+
+    /**
+     * A list of artifacts containing resources which should be copied into the
+     * Javadoc output directory (like stylesheets, icons, etc.).
+     * <br/>
+     * Example:
+     * <pre>
+     * &lt;resourcesArtifacts&gt;
+     *   &lt;resourcesArtifact&gt;
+     *     &lt;groupId&gt;external.group.id&lt;/groupId&gt;
+     *     &lt;artifactId&gt;external-resources&lt;/artifactId&gt;
+     *     &lt;version&gt;1.0&lt;/version&gt;
+     *   &lt;/resourcesArtifact&gt;
+     * &lt;/resourcesArtifacts&gt;
+     * </pre>
+     * <br/>
+     * See <a 
href="./apidocs/org/apache/maven/plugin/javadoc/options/ResourcesArtifact.html">Javadoc</a>.
+     * <br/>
+     *
+     * @since 2.5
+     */
+    @Parameter( property = "resourcesArtifacts" )
+    private ResourcesArtifact[] resourcesArtifacts;
+
+    /**
+     * The local repository where the artifacts are located.
+     */
+    @Parameter( property = "localRepository" )
+    private ArtifactRepository localRepository;
+
+    /**
+     * The projects in the reactor for aggregation report.
+     */
+    @Parameter( property = "reactorProjects", readonly = true )
+    private List<MavenProject> reactorProjects;
+
+    /**
+     * Set this to <code>true</code> to debug the Javadoc plugin. With this, 
<code>javadoc.bat(or.sh)</code>,
+     * <code>options</code>, <code>@packages</code> or <code>argfile</code> 
files are provided in the output directory.
+     * <br/>
+     *
+     * @since 2.1
+     */
+    @Parameter( property = "debug", defaultValue = "false" )
+    private boolean debug;
+
+    /**
+     * Sets the absolute path of the Javadoc Tool executable to use. Since 
version 2.5, a mere directory specification
+     * is sufficient to have the plugin use "javadoc" or "javadoc.exe" 
respectively from this directory.
+     *
+     * @since 2.3
+     */
+    @Parameter( property = "javadocExecutable" )
+    private String javadocExecutable;
+
+    /**
+     * Version of the Javadoc Tool executable to use, ex. "1.3", "1.5".
+     *
+     * @since 2.3
+     */
+    @Parameter( property = "javadocVersion" )
+    private String javadocVersion;
+
+    /**
+     * Version of the Javadoc Tool executable to use.
+     */
+    private JavadocVersion javadocRuntimeVersion;
+
+    /**
+     * Specifies whether the Javadoc generation should be skipped.
+     *
+     * @since 2.5
+     */
+    @Parameter( property = "maven.javadoc.skip", defaultValue = "false" )
+    protected boolean skip;
+
+    /**
+     * Specifies if the build will fail if there are errors during javadoc 
execution or not.
+     *
+     * @since 2.5
+     */
+    @Parameter( property = "maven.javadoc.failOnError", defaultValue = "true" )
+    protected boolean failOnError;
+
+    /**
+     * Specifies to use the
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#standard";>
+     * options provided by the Standard Doclet</a> for a custom doclet.
+     * <br/>
+     * Example:
+     * <pre>
+     * &lt;docletArtifacts&gt;
+     *   &lt;docletArtifact&gt;
+     *     &lt;groupId&gt;com.sun.tools.doclets&lt;/groupId&gt;
+     *     &lt;artifactId&gt;doccheck&lt;/artifactId&gt;
+     *     &lt;version&gt;1.2b2&lt;/version&gt;
+     *   &lt;/docletArtifact&gt;
+     * &lt;/docletArtifacts&gt;
+     * &lt;useStandardDocletOptions&gt;true&lt;/useStandardDocletOptions&gt;
+     * </pre>
+     *
+     * @since 2.5
+     */
+    @Parameter( property = "useStandardDocletOptions", defaultValue = "true" )
+    protected boolean useStandardDocletOptions;
+
+    /**
+     * Detect the Javadoc links for all dependencies defined in the project. 
The detection is based on the default
+     * Maven conventions, i.e.: <code>${project.url}/apidocs</code>.
+     * <br/>
+     * For instance, if the project has a dependency to
+     * <a href="http://commons.apache.org/lang/";>Apache Commons Lang</a> i.e.:
+     * <pre>
+     * &lt;dependency&gt;
+     *   &lt;groupId&gt;commons-lang&lt;/groupId&gt;
+     *   &lt;artifactId&gt;commons-lang&lt;/artifactId&gt;
+     * &lt;/dependency&gt;
+     * </pre>
+     * The added Javadoc <code>-link</code> parameter will be 
<code>http://commons.apache.org/lang/apidocs</code>.
+     *
+     * @see #links
+     * @since 2.6
+     */
+    @Parameter( property = "detectLinks", defaultValue = "false" )
+    private boolean detectLinks;
+
+    /**
+     * Detect the links for all modules defined in the project.
+     * <br/>
+     * If {@link #reactorProjects} is defined in a non-aggregator way, it 
generates default offline links
+     * between modules based on the defined project's urls. For instance, if a 
parent project has two projects
+     * <code>module1</code> and <code>module2</code>, the 
<code>-linkoffline</code> will be:
+     * <br/>
+     * The added Javadoc <code>-linkoffline</code> parameter for 
<b>module1</b> will be
+     * 
<code>/absolute/path/to/</code><b>module2</b><code>/target/site/apidocs</code>
+     * <br/>
+     * The added Javadoc <code>-linkoffline</code> parameter for 
<b>module2</b> will be
+     * 
<code>/absolute/path/to/</code><b>module1</b><code>/target/site/apidocs</code>
+     *
+     * @see #offlineLinks
+     * @since 2.6
+     */
+    @Parameter( property = "detectOfflineLinks", defaultValue = "true" )
+    private boolean detectOfflineLinks;
+
+    /**
+     * Detect the Java API link for the current build, i.e. 
<code>http://docs.oracle.com/javase/1.4.2/docs/api/</code>
+     * for Java source 1.4.
+     * <br/>
+     * By default, the goal detects the Javadoc API link depending the value 
of the <code>source</code>
+     * parameter in the 
<code>org.apache.maven.plugins:maven-compiler-plugin</code>
+     * (defined in <code>${project.build.plugins}</code> or in 
<code>${project.build.pluginManagement}</code>),
+     * or try to compute it from the {@link #javadocExecutable} version.
+     * <br/>
+     * See
+     * <a 
href="./apidocs/org/apache/maven/plugin/javadoc/AbstractJavadocMojo.html#DEFAULT_JAVA_API_LINKS">Javadoc</a>
+     * for the default values.
+     * <br/>
+     *
+     * @see #links
+     * @see #javaApiLinks
+     * @see #DEFAULT_JAVA_API_LINKS
+     * @since 2.6
+     */
+    @Parameter( property = "detectJavaApiLink", defaultValue = "true" )
+    private boolean detectJavaApiLink;
+
+    /**
+     * Use this parameter <b>only</b> if the <a 
href="http://java.sun.com/reference/api/index.html";>Sun Javadoc API</a>
+     * urls have been changed or to use custom urls for Javadoc API url.
+     * <br/>
+     * See
+     * <a 
href="./apidocs/org/apache/maven/plugin/javadoc/AbstractJavadocMojo.html#DEFAULT_JAVA_API_LINKS">Javadoc</a>
+     * for the default values.
+     * <br/>
+     *
+     * @see #DEFAULT_JAVA_API_LINKS
+     * @since 2.6
+     */
+    @Parameter( property = "javaApiLinks" )
+    private Properties javaApiLinks;
+
+    /**
+     * Flag controlling content validation of <code>package-list</code> 
resources. If set, the content of
+     * <code>package-list</code> resources will be validated.
+     *
+     * @since 2.8
+     */
+    @Parameter( property = "validateLinks", defaultValue = "false" )
+    private boolean validateLinks;
+
+    // ----------------------------------------------------------------------
+    // Javadoc Options - all alphabetical
+    // ----------------------------------------------------------------------
+
+    /**
+     * Specifies the paths where the boot classes reside. The 
<code>bootclasspath</code> can contain multiple paths
+     * by separating them with a colon (<code>:</code>) or a semi-colon 
(<code>;</code>).
+     * <br/>
+     * See <a
+     * 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#bootclasspath";>bootclasspath</a>.
+     * <br/>
+     *
+     * @since 2.5
+     */
+    @Parameter( property = "bootclasspath" )
+    private String bootclasspath;
+
+    /**
+     * Specifies the artifacts where the boot classes reside.
+     * <br/>
+     * See <a
+     * 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#bootclasspath";>bootclasspath</a>.
+     * <br/>
+     * Example:
+     * <pre>
+     * &lt;bootclasspathArtifacts&gt;
+     *   &lt;bootclasspathArtifact&gt;
+     *     &lt;groupId&gt;my-groupId&lt;/groupId&gt;
+     *     &lt;artifactId&gt;my-artifactId&lt;/artifactId&gt;
+     *     &lt;version&gt;my-version&lt;/version&gt;
+     *   &lt;/bootclasspathArtifact&gt;
+     * &lt;/bootclasspathArtifacts&gt;
+     * </pre>
+     * <br/>
+     * See <a 
href="./apidocs/org/apache/maven/plugin/javadoc/options/BootclasspathArtifact.html">Javadoc</a>.
+     * <br/>
+     *
+     * @since 2.5
+     */
+    @Parameter( property = "bootclasspathArtifacts" )
+    private BootclasspathArtifact[] bootclasspathArtifacts;
+
+    /**
+     * Uses the sentence break iterator to determine the end of the first 
sentence.
+     * <br/>
+     * See <a
+     * 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#breakiterator";>breakiterator</a>.
+     * <br/>
+     * Since <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.4.html#summary";>Java
+     * 1.4</a>.
+     * <br/>
+     */
+    @Parameter( property = "breakiterator", defaultValue = "false" )
+    private boolean breakiterator;
+
+    /**
+     * Specifies the class file that starts the doclet used in generating the 
documentation.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#doclet";>doclet</a>.
+     */
+    @Parameter( property = "doclet" )
+    private String doclet;
+
+    /**
+     * Specifies the artifact containing the doclet starting class file 
(specified with the <code>-doclet</code>
+     * option).
+     * <br/>
+     * See
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#docletpath";>docletpath</a>.
+     * <br/>
+     * Example:
+     * <pre>
+     * &lt;docletArtifact&gt;
+     *   &lt;groupId&gt;com.sun.tools.doclets&lt;/groupId&gt;
+     *   &lt;artifactId&gt;doccheck&lt;/artifactId&gt;
+     *   &lt;version&gt;1.2b2&lt;/version&gt;
+     * &lt;/docletArtifact&gt;
+     * </pre>
+     * <br/>
+     * See <a 
href="./apidocs/org/apache/maven/plugin/javadoc/options/DocletArtifact.html">Javadoc</a>.
+     * <br/>
+     */
+    @Parameter( property = "docletArtifact" )
+    private DocletArtifact docletArtifact;
+
+    /**
+     * Specifies multiple artifacts containing the path for the doclet 
starting class file (specified with the
+     * <code>-doclet</code> option).
+     * <br/>
+     * See
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#docletpath";>docletpath</a>.
+     * <br/>
+     * Example:
+     * <pre>
+     * &lt;docletArtifacts&gt;
+     *   &lt;docletArtifact&gt;
+     *     &lt;groupId&gt;com.sun.tools.doclets&lt;/groupId&gt;
+     *     &lt;artifactId&gt;doccheck&lt;/artifactId&gt;
+     *     &lt;version&gt;1.2b2&lt;/version&gt;
+     *   &lt;/docletArtifact&gt;
+     * &lt;/docletArtifacts&gt;
+     * </pre>
+     * <br/>
+     * See <a 
href="./apidocs/org/apache/maven/plugin/javadoc/options/DocletArtifact.html">Javadoc</a>.
+     * <br/>
+     *
+     * @since 2.1
+     */
+    @Parameter( property = "docletArtifacts" )
+    private DocletArtifact[] docletArtifacts;
+
+    /**
+     * Specifies the path to the doclet starting class file (specified with 
the <code>-doclet</code> option) and
+     * any jar files it depends on. The <code>docletPath</code> can contain 
multiple paths by separating them with
+     * a colon (<code>:</code>) or a semi-colon (<code>;</code>).
+     * <br/>
+     * See
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#docletpath";>docletpath</a>.
+     */
+    @Parameter( property = "docletPath" )
+    private String docletPath;
+
+    /**
+     * Specifies the encoding name of the source files. If not specificed, the 
encoding value will be the value of the
+     * <code>file.encoding</code> system property.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#encoding";>encoding</a>.
+     * <br/>
+     * <b>Note</b>: In 2.4, the default value was locked to 
<code>ISO-8859-1</code> to ensure reproducing build, but
+     * this was reverted in 2.5.
+     * <br/>
+     */
+    @Parameter( property = "encoding", defaultValue = 
"${project.build.sourceEncoding}" )
+    private String encoding;
+
+    /**
+     * Unconditionally excludes the specified packages and their subpackages 
from the list formed by
+     * <code>-subpackages</code>. Multiple packages can be separated by commas 
(<code>,</code>), colons (<code>:</code>)
+     * or semicolons (<code>;</code>).
+     * <br/>
+     * Example:
+     * <pre>
+     * 
&lt;excludePackageNames&gt;*.internal:org.acme.exclude1.*:org.acme.exclude2&lt;/excludePackageNames&gt;
+     * </pre>
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#exclude";>exclude</a>.
+     * <br/>
+     * Since <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.4.html#summary";>Java
+     * 1.4</a>.
+     */
+    @Parameter( property = "excludePackageNames" )
+    private String excludePackageNames;
+
+    /**
+     * Specifies the directories where extension classes reside. Separate 
directories in <code>extdirs</code> with a
+     * colon (<code>:</code>) or a semi-colon (<code>;</code>).
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#extdirs";>extdirs</a>.
+     */
+    @Parameter( property = "extdirs" )
+    private String extdirs;
+
+    /**
+     * Specifies the locale that javadoc uses when generating documentation.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#locale";>locale</a>.
+     */
+    @Parameter( property = "locale" )
+    private String locale;
+
+    /**
+     * Specifies the maximum Java heap size to be used when launching the 
Javadoc tool.
+     * JVMs refer to this property as the <code>-Xmx</code> parameter. 
Example: '512' or '512m'.
+     * The memory unit depends on the JVM used. The units supported could be: 
<code>k</code>, <code>kb</code>,
+     * <code>m</code>, <code>mb</code>, <code>g</code>, <code>gb</code>, 
<code>t</code>, <code>tb</code>.
+     * If no unit specified, the default unit is <code>m</code>.
+     */
+    @Parameter( property = "maxmemory" )
+    private String maxmemory;
+
+    /**
+     * Specifies the minimum Java heap size to be used when launching the 
Javadoc tool.
+     * JVMs refer to this property as the <code>-Xms</code> parameter. 
Example: '512' or '512m'.
+     * The memory unit depends on the JVM used. The units supported could be: 
<code>k</code>, <code>kb</code>,
+     * <code>m</code>, <code>mb</code>, <code>g</code>, <code>gb</code>, 
<code>t</code>, <code>tb</code>.
+     * If no unit specified, the default unit is <code>m</code>.
+     */
+    @Parameter( property = "minmemory" )
+    private String minmemory;
+
+    /**
+     * This option creates documentation with the appearance and functionality 
of documentation generated by
+     * Javadoc 1.1.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#1.1";>1.1</a>.
+     * <br/>
+     */
+    @Parameter( property = "old", defaultValue = "false" )
+    private boolean old;
+
+    /**
+     * Specifies that javadoc should retrieve the text for the overview 
documentation from the "source" file
+     * specified by path/filename and place it on the Overview page 
(overview-summary.html).
+     * <br/>
+     * <b>Note</b>: could be in conflict with &lt;nooverview/&gt;.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#overview";>overview</a>.
+     * <br/>
+     */
+    @Parameter( property = "overview", defaultValue = 
"${basedir}/src/main/javadoc/overview.html" )
+    private File overview;
+
+    /**
+     * Shuts off non-error and non-warning messages, leaving only the warnings 
and errors appear, making them
+     * easier to view.
+     * <br/>
+     * Note: was a standard doclet in Java 1.4.2 (refer to bug ID
+     * <a 
href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4714350";>4714350</a>).
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#quiet";>quiet</a>.
+     * <br/>
+     * Since Java 5.0.
+     * <br/>
+     */
+    @Parameter( property = "quiet", defaultValue = "false" )
+    private boolean quiet;
+
+    /**
+     * Specifies the access level for classes and members to show in the 
Javadocs.
+     * Possible values are:
+     * <ul>
+     * <li><a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#public";>public</a>
+     * (shows only public classes and members)</li>
+     * <li><a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#protected";>protected</a>
+     * (shows only public and protected classes and members)</li>
+     * <li><a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#package";>package</a>
+     * (shows all classes and members not marked private)</li>
+     * <li><a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#private";>private</a>
+     * (shows all classes and members)</li>
+     * </ul>
+     * <br/>
+     */
+    @Parameter( property = "show", defaultValue = "protected" )
+    private String show;
+
+    /**
+     * Necessary to enable javadoc to handle assertions introduced in J2SE v 
1.4 source code or generics introduced in
+     * J2SE v5.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#source";>source</a>.
+     * <br/>
+     * Since <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.4.html#summary";>Java
+     * 1.4</a>.
+     */
+    @Parameter( property = "source" )
+    private String source;
+
+    /**
+     * Specifies the source paths where the subpackages are located. The 
<code>sourcepath</code> can contain
+     * multiple paths by separating them with a colon (<code>:</code>) or a 
semi-colon (<code>;</code>).
+     * <br/>
+     * See
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#sourcepath";>sourcepath</a>.
+     */
+    @Parameter( property = "sourcepath" )
+    private String sourcepath;
+
+    /**
+     * Specifies the package directory where javadoc will be executed. 
Multiple packages can be separated by
+     * colons (<code>:</code>).
+     * <br/>
+     * See
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#subpackages";>subpackages</a>.
+     * <br/>
+     * Since <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.4.html#summary";>Java
+     * 1.4</a>.
+     */
+    @Parameter( property = "subpackages" )
+    private String subpackages;
+
+    /**
+     * Provides more detailed messages while javadoc is running.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#verbose";>verbose</a>.
+     * <br/>
+     */
+    @Parameter( property = "verbose", defaultValue = "false" )
+    private boolean verbose;
+
+    // ----------------------------------------------------------------------
+    // Standard Doclet Options - all alphabetical
+    // ----------------------------------------------------------------------
+
+    /**
+     * Specifies whether or not the author text is included in the generated 
Javadocs.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#author";>author</a>.
+     * <br/>
+     */
+    @Parameter( property = "author", defaultValue = "true" )
+    private boolean author;
+
+    /**
+     * Specifies the text to be placed at the bottom of each output file.<br/>
+     * If you want to use html you have to put it in a CDATA section, <br/>
+     * eg. <code>&lt;![CDATA[Copyright 2005, &lt;a 
href="http://www.mycompany.com";>MyCompany, Inc.&lt;a>]]&gt;</code>
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#bottom";>bottom</a>.
+     * <br/>
+     */
+    @Parameter( property = "bottom",
+                    defaultValue = "Copyright &#169; 
{inceptionYear}&#x2013;{currentYear} {organizationName}. "
+                        + "All rights reserved." )
+    private String bottom;
+
+    /**
+     * Specifies the HTML character set for this document. If not specificed, 
the charset value will be the value of
+     * the <code>docencoding</code> parameter.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#charset";>charset</a>.
+     * <br/>
+     */
+    @Parameter( property = "charset" )
+    private String charset;
+
+    /**
+     * Specifies the encoding of the generated HTML files. If not specificed, 
the docencoding value will be
+     * <code>UTF-8</code>.
+     * <br/>
+     * See
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#docencoding";>docencoding</a>.
+     */
+    @Parameter( property = "docencoding", defaultValue = 
"${project.reporting.outputEncoding}" )
+    private String docencoding;
+
+    /**
+     * Enables deep copying of the <code>&#42;&#42;/doc-files</code> 
directories and the specifc <code>resources</code>
+     * directory from the <code>javadocDirectory</code> directory (for 
instance,
+     * <code>src/main/javadoc/com/mycompany/myapp/doc-files</code> and 
<code>src/main/javadoc/resources</code>).
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#docfilessubdirs";>
+     * docfilessubdirs</a>.
+     * <br/>
+     * Since <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.4.html#summary";>Java
+     * 1.4</a>.
+     * <br/>
+     * See <a href="#javadocDirectory">javadocDirectory</a>.
+     * <br/>
+     *
+     * @see #excludedocfilessubdir
+     * @see #javadocDirectory
+     */
+    @Parameter( property = "docfilessubdirs", defaultValue = "false" )
+    private boolean docfilessubdirs;
+
+    /**
+     * Specifies specific checks to be performed on Javadoc comments.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html#BEJEFABE";>doclint</a>.
+     *
+     * @since 3.0.0
+     */
+    @Parameter( property = "doclint" )
+    private String doclint;
+
+    /**
+     * Specifies the title to be placed near the top of the overview summary 
file.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#doctitle";>doctitle</a>.
+     * <br/>
+     */
+    @Parameter( property = "doctitle", defaultValue = "${project.name} 
${project.version} API" )
+    private String doctitle;
+
+    /**
+     * Excludes any "doc-files" subdirectories with the given names. Multiple 
patterns can be excluded
+     * by separating them with colons (<code>:</code>).
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#excludedocfilessubdir";>
+     * excludedocfilessubdir</a>.
+     * <br/>
+     * Since <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.4.html#summary";>Java
+     * 1.4</a>.
+     *
+     * @see #docfilessubdirs
+     */
+    @Parameter( property = "excludedocfilessubdir" )
+    private String excludedocfilessubdir;
+
+    /**
+     * Specifies the footer text to be placed at the bottom of each output 
file.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#footer";>footer</a>.
+     */
+    @Parameter( property = "footer" )
+    private String footer;
+
+    /**
+     * Separates packages on the overview page into whatever groups you 
specify, one group per table. The
+     * packages pattern can be any package name, or can be the start of any 
package name followed by an asterisk
+     * (<code>*</code>) meaning "match any characters". Multiple patterns can 
be included in a group
+     * by separating them with colons (<code>:</code>).
+     * <br/>
+     * Example:
+     * <pre>
+     * &lt;groups&gt;
+     *   &lt;group&gt;
+     *     &lt;title&gt;Core Packages&lt;/title&gt;
+     *     &lt;!-- To includes java.lang, java.lang.ref,
+     *     java.lang.reflect and only java.util
+     *     (i.e. not java.util.jar) --&gt;
+     *     &lt;packages&gt;java.lang*:java.util&lt;/packages&gt;
+     *   &lt;/group&gt;
+     *   &lt;group&gt;
+     *     &lt;title&gt;Extension Packages&lt;/title&gt;
+     *     &nbsp;&lt;!-- To include javax.accessibility,
+     *     javax.crypto, ... (among others) --&gt;
+     *     &lt;packages&gt;javax.*&lt;/packages&gt;
+     *   &lt;/group&gt;
+     * &lt;/groups&gt;
+     * </pre>
+     * <b>Note</b>: using <code>java.lang.*</code> for <code>packages</code> 
would omit the <code>java.lang</code>
+     * package but using <code>java.lang*</code> will include it.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#group";>group</a>.
+     * <br/>
+     * See <a 
href="./apidocs/org/apache/maven/plugin/javadoc/options/Group.html">Javadoc</a>.
+     * <br/>
+     */
+    @Parameter( property = "groups" )
+    private Group[] groups;
+
+    /**
+     * Specifies the header text to be placed at the top of each output file.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#header";>header</a>.
+     */
+    @Parameter( property = "header" )
+    private String header;
+
+    /**
+     * Specifies the path of an alternate help file path\filename that the 
HELP link in the top and bottom
+     * navigation bars link to.
+     * <br/>
+     * <b>Note</b>: could be in conflict with &lt;nohelp/&gt;.
+     * <br/>
+     * The <code>helpfile</code> could be an absolute File path.
+     * <br/>
+     * Since 2.6, it could be also be a path from a resource in the current 
project source directories
+     * (i.e. <code>src/main/java</code>, <code>src/main/resources</code> or 
<code>src/main/javadoc</code>)
+     * or from a resource in the Javadoc plugin dependencies, for instance:
+     * <pre>
+     * &lt;helpfile&gt;path/to/your/resource/yourhelp-doc.html&lt;/helpfile&gt;
+     * </pre>
+     * Where <code>path/to/your/resource/yourhelp-doc.html</code> could be in 
<code>src/main/javadoc</code>.
+     * <pre>
+     * &lt;build&gt;
+     *   &lt;plugins&gt;
+     *     &lt;plugin&gt;
+     *       &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
+     *       &lt;artifactId&gt;maven-javadoc-plugin&lt;/artifactId&gt;
+     *       &lt;configuration&gt;
+     *         
&lt;helpfile&gt;path/to/your/resource/yourhelp-doc.html&lt;/helpfile&gt;
+     *         ...
+     *       &lt;/configuration&gt;
+     *       &lt;dependencies&gt;
+     *         &lt;dependency&gt;
+     *           &lt;groupId&gt;groupId&lt;/groupId&gt;
+     *           &lt;artifactId&gt;artifactId&lt;/artifactId&gt;
+     *           &lt;version&gt;version&lt;/version&gt;
+     *         &lt;/dependency&gt;
+     *       &lt;/dependencies&gt;
+     *     &lt;/plugin&gt;
+     *     ...
+     *   &lt;plugins&gt;
+     * &lt;/build&gt;
+     * </pre>
+     * Where <code>path/to/your/resource/yourhelp-doc.html</code> is defined 
in the
+     * <code>groupId:artifactId:version</code> javadoc plugin dependency.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#helpfile";>helpfile</a>.
+     */
+    @Parameter( property = "helpfile" )
+    private String helpfile;
+
+    /**
+     * Adds HTML meta keyword tags to the generated file for each class.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#keywords";>keywords</a>.
+     * <br/>
+     * Since
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.4.2.html#commandlineoptions";>
+     * Java 1.4.2</a>.
+     * <br/>
+     * Since
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.5.0.html#commandlineoptions";>
+     * Java 5.0</a>.
+     * <br/>
+     *
+     * @since 2.1
+     */
+    @Parameter( property = "keywords", defaultValue = "false" )
+    private boolean keywords;
+
+    /**
+     * Creates links to existing javadoc-generated documentation of external 
referenced classes.
+     * <br/>
+     * <b>Notes</b>:
+     * <ol>
+     * <li>only used if {@link #isOffline} is set to <code>false</code>.</li>
+     * <li>all given links should have a fetchable <code>/package-list</code> 
file. For instance:
+     * <pre>
+     * &lt;links&gt;
+     *   &lt;link&gt;http://docs.oracle.com/javase/1.4.2/docs/api&lt;/link&gt;
+     * &lt;links&gt;
+     * </pre>
+     * will be used because 
<code>http://docs.oracle.com/javase/1.4.2/docs/api/package-list</code> 
exists.</li>
+     * <li>if {@link #detectLinks} is defined, the links between the project 
dependencies are
+     * automatically added.</li>
+     * <li>if {@link #detectJavaApiLink} is defined, a Java API link, based on 
the Java version of the
+     * project's sources, will be added automatically.</li>
+     * </ol>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#link";>link</a>.
+     *
+     * @see #detectLinks
+     * @see #detectJavaApiLink
+     */
+    @Parameter( property = "links" )
+    protected ArrayList<String> links;
+
+    /**
+     * Creates an HTML version of each source file (with line numbers) and 
adds links to them from the standard
+     * HTML documentation.
+     * <br/>
+     * See
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#linksource";>linksource</a>.
+     * <br/>
+     * Since <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.4.html#summary";>Java
+     * 1.4</a>.
+     * <br/>
+     */
+    @Parameter( property = "linksource", defaultValue = "false" )
+    private boolean linksource;
+
+    /**
+     * Suppress the entire comment body, including the main description and 
all tags, generating only declarations.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#nocomment";>nocomment</a>.
+     * <br/>
+     * Since <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.4.html#summary";>Java
+     * 1.4</a>.
+     * <br/>
+     */
+    @Parameter( property = "nocomment", defaultValue = "false" )
+    private boolean nocomment;
+
+    /**
+     * Prevents the generation of any deprecated API at all in the 
documentation.
+     * <br/>
+     * See
+     * <a
+     * 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#nodeprecated";>nodeprecated</a>.
+     * <br/>
+     */
+    @Parameter( property = "nodeprecated", defaultValue = "false" )
+    private boolean nodeprecated;
+
+    /**
+     * Prevents the generation of the file containing the list of deprecated 
APIs (deprecated-list.html) and the
+     * link in the navigation bar to that page.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#nodeprecatedlist";>
+     * nodeprecatedlist</a>.
+     * <br/>
+     */
+    @Parameter( property = "nodeprecatedlist", defaultValue = "false" )
+    private boolean nodeprecatedlist;
+
+    /**
+     * Omits the HELP link in the navigation bars at the top and bottom of 
each page of output.
+     * <br/>
+     * <b>Note</b>: could be in conflict with &lt;helpfile/&gt;.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#nohelp";>nohelp</a>.
+     * <br/>
+     */
+    @Parameter( property = "nohelp", defaultValue = "false" )
+    private boolean nohelp;
+
+    /**
+     * Omits the index from the generated docs.
+     * <br/>
+     * <b>Note</b>: could be in conflict with &lt;splitindex/&gt;.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#noindex";>noindex</a>.
+     * <br/>
+     */
+    @Parameter( property = "noindex", defaultValue = "false" )
+    private boolean noindex;
+
+    /**
+     * Omits the navigation bar from the generated docs.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#nonavbar";>nonavbar</a>.
+     * <br/>
+     */
+    @Parameter( property = "nonavbar", defaultValue = "false" )
+    private boolean nonavbar;
+
+    /**
+     * Omits the entire overview page from the generated docs.
+     * <br/>
+     * <b>Note</b>: could be in conflict with &lt;overview/&gt;.
+     * <br/>
+     * Standard Doclet undocumented option.
+     * <br/>
+     *
+     * @since 2.4
+     */
+    @Parameter( property = "nooverview", defaultValue = "false" )
+    private boolean nooverview;
+
+    /**
+     * Omits qualifying package name from ahead of class names in output.
+     * Example:
+     * <pre>
+     * &lt;noqualifier&gt;all&lt;/noqualifier&gt;
+     * or
+     * &lt;noqualifier&gt;packagename1:packagename2&lt;/noqualifier&gt;
+     * </pre>
+     * See
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#noqualifier";>noqualifier</a>.
+     * <br/>
+     * Since <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.4.html#summary";>Java
+     * 1.4</a>.
+     */
+    @Parameter( property = "noqualifier" )
+    private String noqualifier;
+
+    /**
+     * Omits from the generated docs the "Since" sections associated with the 
since tags.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#nosince";>nosince</a>.
+     * <br/>
+     */
+    @Parameter( property = "nosince", defaultValue = "false" )
+    private boolean nosince;
+
+    /**
+     * Suppresses the timestamp, which is hidden in an HTML comment in the 
generated HTML near the top of each page.
+     * <br/>
+     * See
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#notimestamp";>notimestamp</a>.
+     * <br/>
+     * Since
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.5.0.html#commandlineoptions";>
+     * Java 5.0</a>.
+     * <br/>
+     *
+     * @since 2.1
+     */
+    @Parameter( property = "notimestamp", defaultValue = "false" )
+    private boolean notimestamp;
+
+    /**
+     * Omits the class/interface hierarchy pages from the generated docs.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#notree";>notree</a>.
+     * <br/>
+     */
+    @Parameter( property = "notree", defaultValue = "false" )
+    private boolean notree;
+
+    /**
+     * This option is a variation of <code>-link</code>; they both create 
links to javadoc-generated documentation
+     * for external referenced classes.
+     * <br/>
+     * See
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#linkoffline";>linkoffline</a>.
+     * <br/>
+     * Example:
+     * <pre>
+     * &lt;offlineLinks&gt;
+     *   &lt;offlineLink&gt;
+     *     &lt;url&gt;http://docs.oracle.com/javase/1.5.0/docs/api/&lt;/url&gt;
+     *     &lt;location&gt;../javadoc/jdk-5.0/&lt;/location&gt;
+     *   &lt;/offlineLink&gt;
+     * &lt;/offlineLinks&gt;
+     * </pre>
+     * <br/>
+     * <b>Note</b>: if {@link #detectOfflineLinks} is defined, the offline 
links between the project modules are
+     * automatically added if the goal is calling in a non-aggregator way.
+     * <br/>
+     * See <a 
href="./apidocs/org/apache/maven/plugin/javadoc/options/OfflineLink.html">Javadoc</a>.
+     * <br/>
+     */
+    @Parameter( property = "offlineLinks" )
+    private OfflineLink[] offlineLinks;
+
+    /**
+     * Specifies the destination directory where javadoc saves the generated 
HTML files.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#d";>d</a>.
+     * <br/>
+     */
+    @Parameter( property = "destDir", alias = "destDir", defaultValue = 
"${project.build.directory}/apidocs",
+                    required = true )
+    protected File outputDirectory;
+
+    /**
+     * Specify the text for upper left frame.
+     * <br/>
+     * Since
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.4.2.html#commandlineoptions";>
+     * Java 1.4.2</a>.
+     *
+     * @since 2.1
+     */
+    @Parameter( property = "packagesheader" )
+    private String packagesheader;
+
+    /**
+     * Generates compile-time warnings for missing serial tags.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#serialwarn";>serialwarn</a>
+     * <br/>
+     */
+    @Parameter( property = "serialwarn", defaultValue = "false" )
+    private boolean serialwarn;
+
+    /**
+     * Specify the number of spaces each tab takes up in the source. If no tab 
is used in source, the default
+     * space is used.
+     * <br/>
+     * Note: was <code>linksourcetab</code> in Java 1.4.2 (refer to bug ID
+     * <a 
href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4788919";>4788919</a>).
+     * <br/>
+     * Since
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.4.2.html#commandlineoptions";>
+     * 1.4.2</a>.
+     * <br/>
+     * Since Java 5.0.
+     *
+     * @since 2.1
+     */
+    @Parameter( property = "sourcetab", alias = "linksourcetab" )
+    private int sourcetab;
+
+    /**
+     * Splits the index file into multiple files, alphabetically, one file per 
letter, plus a file for any index
+     * entries that start with non-alphabetical characters.
+     * <br/>
+     * <b>Note</b>: could be in conflict with &lt;noindex/&gt;.
+     * <br/>
+     * See
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#splitindex";>splitindex</a>.
+     * <br/>
+     */
+    @Parameter( property = "splitindex", defaultValue = "false" )
+    private boolean splitindex;
+
+    /**
+     * Specifies whether the stylesheet to be used is the <code>maven</code>'s 
javadoc stylesheet or
+     * <code>java</code>'s default stylesheet when a <i>stylesheetfile</i> 
parameter is not specified.
+     * <br/>
+     * Possible values: <code>maven<code> or <code>java</code>.
+     * <br/>
+     */
+    @Parameter( property = "stylesheet", defaultValue = "java" )
+    private String stylesheet;
+
+    /**
+     * Specifies the path of an alternate HTML stylesheet file.
+     * <br/>
+     * The <code>stylesheetfile</code> could be an absolute File path.
+     * <br/>
+     * Since 2.6, it could be also be a path from a resource in the current 
project source directories
+     * (i.e. <code>src/main/java</code>, <code>src/main/resources</code> or 
<code>src/main/javadoc</code>)
+     * or from a resource in the Javadoc plugin dependencies, for instance:
+     * <pre>
+     * 
&lt;stylesheetfile&gt;path/to/your/resource/yourstylesheet.css&lt;/stylesheetfile&gt;
+     * </pre>
+     * Where <code>path/to/your/resource/yourstylesheet.css</code> could be in 
<code>src/main/javadoc</code>.
+     * <pre>
+     * &lt;build&gt;
+     *   &lt;plugins&gt;
+     *     &lt;plugin&gt;
+     *       &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
+     *       &lt;artifactId&gt;maven-javadoc-plugin&lt;/artifactId&gt;
+     *       &lt;configuration&gt;
+     *         
&lt;stylesheetfile&gt;path/to/your/resource/yourstylesheet.css&lt;/stylesheetfile&gt;
+     *         ...
+     *       &lt;/configuration&gt;
+     *       &lt;dependencies&gt;
+     *         &lt;dependency&gt;
+     *           &lt;groupId&gt;groupId&lt;/groupId&gt;
+     *           &lt;artifactId&gt;artifactId&lt;/artifactId&gt;
+     *           &lt;version&gt;version&lt;/version&gt;
+     *         &lt;/dependency&gt;
+     *       &lt;/dependencies&gt;
+     *     &lt;/plugin&gt;
+     *     ...
+     *   &lt;plugins&gt;
+     * &lt;/build&gt;
+     * </pre>
+     * Where <code>path/to/your/resource/yourstylesheet.css</code> is defined 
in the
+     * <code>groupId:artifactId:version</code> javadoc plugin dependency.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#stylesheetfile";>
+     * stylesheetfile</a>.
+     */
+    @Parameter( property = "stylesheetfile" )
+   private String stylesheetfile;
+
+    /**
+     * Specifies the class file that starts the taglet used in generating the 
documentation for that tag.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#taglet";>taglet</a>.
+     * <br/>
+     * Since
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.4.html#summary";>Java
 1.4</a>.
+     */
+    @Parameter( property = "taglet" )
+    private String taglet;
+
+    /**
+     * Specifies the Taglet artifact containing the taglet class files 
(.class).
+     * <br/>
+     * See
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#tagletpath";>tagletpath</a>.
+     * <br/>
+     * Example:
+     * <pre>
+     * &lt;taglets&gt;
+     *   &lt;taglet&gt;
+     *     
&lt;tagletClass&gt;com.sun.tools.doclets.ToDoTaglet&lt;/tagletClass&gt;
+     *   &lt;/taglet&gt;
+     *   &lt;taglet&gt;
+     *     &lt;tagletClass&gt;package.to.AnotherTagletClass&lt;/tagletClass&gt;
+     *   &lt;/taglet&gt;
+     *   ...
+     * &lt;/taglets&gt;
+     * &lt;tagletArtifact&gt;
+     *   &lt;groupId&gt;group-Taglet&lt;/groupId&gt;
+     *   &lt;artifactId&gt;artifact-Taglet&lt;/artifactId&gt;
+     *   &lt;version&gt;version-Taglet&lt;/version&gt;
+     * &lt;/tagletArtifact&gt;
+     * </pre>
+     * <br/>
+     * See <a 
href="./apidocs/org/apache/maven/plugin/javadoc/options/TagletArtifact.html">Javadoc</a>.
+     * <br/>
+     *
+     * @since 2.1
+     */
+    @Parameter( property = "tagletArtifact" )
+    private TagletArtifact tagletArtifact;
+
+    /**
+     * Specifies several Taglet artifacts containing the taglet class files 
(.class). These taglets class names will be
+     * auto-detect and so no need to specify them.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#taglet";>taglet</a>.
+     * <br/>
+     * See
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#tagletpath";>tagletpath</a>.
+     * <br/>
+     * Example:
+     * <pre>
+     * &lt;tagletArtifacts&gt;
+     *   &lt;tagletArtifact&gt;
+     *     &lt;groupId&gt;group-Taglet&lt;/groupId&gt;
+     *     &lt;artifactId&gt;artifact-Taglet&lt;/artifactId&gt;
+     *     &lt;version&gt;version-Taglet&lt;/version&gt;
+     *   &lt;/tagletArtifact&gt;
+     *   ...
+     * &lt;/tagletArtifacts&gt;
+     * </pre>
+     * <br/>
+     * See <a 
href="./apidocs/org/apache/maven/plugin/javadoc/options/TagletArtifact.html">Javadoc</a>.
+     * <br/>
+     *
+     * @since 2.5
+     */
+    @Parameter( property = "tagletArtifacts" )
+    private TagletArtifact[] tagletArtifacts;
+
+    /**
+     * Specifies the search paths for finding taglet class files (.class). The 
<code>tagletpath</code> can contain
+     * multiple paths by separating them with a colon (<code>:</code>) or a 
semi-colon (<code>;</code>).
+     * <br/>
+     * See
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#tagletpath";>tagletpath</a>.
+     * <br/>
+     * Since
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.4.html#summary";>Java
 1.4</a>.
+     */
+    @Parameter( property = "tagletpath" )
+    private String tagletpath;
+
+    /**
+     * Enables the Javadoc tool to interpret multiple taglets.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#taglet";>taglet</a>.
+     * <br/>
+     * See
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#tagletpath";>tagletpath</a>.
+     * <br/>
+     * Example:
+     * <pre>
+     * &lt;taglets&gt;
+     *   &lt;taglet&gt;
+     *     
&lt;tagletClass&gt;com.sun.tools.doclets.ToDoTaglet&lt;/tagletClass&gt;
+     *     &lt;!--&lt;tagletpath&gt;/home/taglets&lt;/tagletpath&gt;--&gt;
+     *     &lt;tagletArtifact&gt;
+     *       &lt;groupId&gt;group-Taglet&lt;/groupId&gt;
+     *       &lt;artifactId&gt;artifact-Taglet&lt;/artifactId&gt;
+     *       &lt;version&gt;version-Taglet&lt;/version&gt;
+     *     &lt;/tagletArtifact&gt;
+     *   &lt;/taglet&gt;
+     * &lt;/taglets&gt;
+     * </pre>
+     * <br/>
+     * See <a 
href="./apidocs/org/apache/maven/plugin/javadoc/options/Taglet.html">Javadoc</a>.
+     * <br/>
+     *
+     * @since 2.1
+     */
+    @Parameter( property = "taglets" )
+    private Taglet[] taglets;
+
+    /**
+     * Enables the Javadoc tool to interpret a simple, one-argument custom 
block tag tagname in doc comments.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#tag";>tag</a>.
+     * <br/>
+     * Since
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/whatsnew-1.4.html#summary";>Java
 1.4</a>.
+     * <br/>
+     * Example:
+     * <pre>
+     * &lt;tags&gt;
+     *   &lt;tag&gt;
+     *     &lt;name&gt;todo&lt;/name&gt;
+     *     &lt;placement&gt;a&lt;/placement&gt;
+     *     &lt;head&gt;To Do:&lt;/head&gt;
+     *   &lt;/tag&gt;
+     * &lt;/tags&gt;
+     * </pre>
+     * <b>Note</b>: the placement should be a combinaison of Xaoptcmf letters:
+     * <ul>
+     * <li><b><code>X</code></b> (disable tag)</li>
+     * <li><b><code>a</code></b> (all)</li>
+     * <li><b><code>o</code></b> (overview)</li>
+     * <li><b><code>p</code></b> (packages)</li>
+     * <li><b><code>t</code></b> (types, that is classes and interfaces)</li>
+     * <li><b><code>c</code></b> (constructors)</li>
+     * <li><b><code>m</code></b> (methods)</li>
+     * <li><b><code>f</code></b> (fields)</li>
+     * </ul>
+     * See <a 
href="./apidocs/org/apache/maven/plugin/javadoc/options/Tag.html">Javadoc</a>.
+     * <br/>
+     */
+    @Parameter( property = "tags" )
+    private Tag[] tags;
+
+    /**
+     * Specifies the top text to be placed at the top of each output file.
+     * <br/>
+     * See <a 
href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6227616";>6227616</a>.
+     * <br/>
+     * Since Java 6.0
+     *
+     * @since 2.4
+     */
+    @Parameter( property = "top" )
+    private String top;
+
+    /**
+     * Includes one "Use" page for each documented class and package.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#use";>use</a>.
+     * <br/>
+     */
+    @Parameter( property = "use", defaultValue = "true" )
+    private boolean use;
+
+    /**
+     * Includes the version text in the generated docs.
+     * <br/>
+     * See <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#version";>version</a>.
+     * <br/>
+     */
+    @Parameter( property = "version", defaultValue = "true" )
+    private boolean version;
+
+    /**
+     * Specifies the title to be placed in the HTML title tag.
+     * <br/>
+     * See
+     * <a 
href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#windowtitle";>windowtitle</a>.
+     * <br/>
+     */
+    @Parameter( property = "windowtitle", defaultValue = "${project.name} 
${project.version} API" )
+    private String windowtitle;
+
+    /**
+     * Whether dependency -sources jars should be resolved and included as 
source paths for javadoc generation.
+     * This is useful when creating javadocs for a distribution project.
+     *
+     * @since 2.7
+     */
+    @Parameter( defaultValue = "false" )
+    private boolean includeDependencySources;
+
+    /**
+     * Directory where unpacked project sources / test-sources should be 
cached.
+     *
+     * @see #includeDependencySources
+     * @since 2.7
+     */
+    @Parameter( defaultValue = 
"${project.build.directory}/distro-javadoc-sources" )
+    private File sourceDependencyCacheDir;
+
+    /**
+     * Whether to include transitive dependencies in the list of dependency 
-sources jars to include
+     * in this javadoc run.
+     *
+     * @see #includeDependencySources
+     * @since 2.7
+     */
+    @Parameter( defaultValue = "false" )
+    private boolean includeTransitiveDependencySources;
+
+    /**
+     * List of included dependency-source patterns. Example: 
<code>org.apache.maven:*</code>
+     *
+     * @see #includeDependencySources
+     * @since 2.7
+     */
+    @Parameter
+    private List<String> dependencySourceIncludes;
+
+    /**
+     * List of excluded dependency-source patterns. Example: 
<code>org.apache.maven.shared:*</code>
+     *
+     * @see #includeDependencySources
+     * @since 2.7
+     */
+    @Parameter
+    private List<String> dependencySourceExcludes;
+
+    /**
+     * Directory into which assembled {@link JavadocOptions} instances will be 
written before they
+     * are added to javadoc resources bundles.
+     *
+     * @since 2.7
+     */
+    @Parameter( defaultValue = 
"${project.build.directory}/javadoc-bundle-options", readonly = true )
+    private File javadocOptionsDir;
+
+    /**
+     * Transient variable to allow lazy-resolution of javadoc bundles from 
dependencies, so they can
+     * be used at various points in the javadoc generation process.
+     *
+     * @since 2.7
+     */
+    private transient List<JavadocBundle> dependencyJavadocBundles;
+
+    /**
+     * Capability to add additional dependencies to the javadoc classpath.
+     * Example:
+     * <pre>
+     * &lt;additionalDependencies&gt;
+     *   &lt;additionalDependency&gt;
+     *     &lt;groupId&gt;geronimo-spec&lt;/groupId&gt;
+     *     &lt;artifactId&gt;geronimo-spec-jta&lt;/artifactId&gt;
+     *     &lt;version&gt;1.0.1B-rc4:&lt;/version&gt;
+     *   &lt;/additionalDependency&gt;
+     * &lt;/additionalDependencies&gt;
+     * </pre>
+     *
+     * @since 2.8.1
+     */
+    @Parameter
+    private List<AdditionalDependency> additionalDependencies;
+
+    /**
+     * Include filters on the source files. Default is **\/\*.java.
+     * These are ignored if you specify subpackages or subpackage excludes.
+     */
+    @Parameter
+    private List<String> sourceFileIncludes;
+
+    /**
+     * exclude filters on the source files.
+     * These are ignored if you specify subpackages or subpackage excludes.
+     */
+    @Parameter
+    private List<String> sourceFileExcludes;
+
+    /**
+     * To apply the security fix on generated javadoc see 
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-1571
+     * @since 2.9.1
+     */
+    @Parameter( defaultValue = "true", property = 
"maven.javadoc.applyJavadocSecurityFix" )
+    private boolean applyJavadocSecurityFix = true;
+
+    // ----------------------------------------------------------------------
+    // static
+    // ----------------------------------------------------------------------
+
+    static
+    {
+        DEFAULT_JAVA_API_LINKS.put( "api_1.3", 
"http://docs.oracle.com/javase/1.3/docs/api/"; );
+        DEFAULT_JAVA_API_LINKS.put( "api_1.4", 
"http://docs.oracle.com/javase/1.4.2/docs/api/"; );
+        DEFAULT_JAVA_API_LINKS.put( "api_1.5", 
"http://docs.oracle.com/javase/1.5.0/docs/api/"; );
+        DEFAULT_JAVA_API_LINKS.put( "api_1.6", 
"http://docs.oracle.com/javase/6/docs/api/"; );
+        DEFAULT_JAVA_API_LINKS.put( "api_1.7", 
"http://docs.oracle.com/javase/7/docs/api/"; );
+        DEFAULT_JAVA_API_LINKS.put( "api_1.8", 
"http://docs.oracle.com/javase/8/docs/api/"; );
+    }
+
+    // ----------------------------------------------------------------------
+    // protected methods
+    // ----------------------------------------------------------------------
+
+    /**
+     * Indicates whether this goal is flagged with <code>@aggregator</code>.
+     *
+     * @return <code>true</code> if the goal is designed as an aggregator, 
<code>false</code> otherwise.
+     * @see AggregatorJavadocReport
+     * @see AggregatorTestJavadocReport
+     */
+    protected boolean isAggregator()
+    {
+        return false;
+    }
+
+    /**
+     * Indicates whether this goal generates documentation for the <code>Java 
Test code</code>.
+     *
+     * @return <code>true</code> if the goal generates Test Javadocs, 
<code>false</code> otherwise.
+     */
+    protected boolean isTest()
+    {
+        return false;
+    }
+
+    /**
+     * @return the output directory
+     */
+    protected String getOutputDirectory()
+    {
+        return outputDirectory.getAbsoluteFile().toString();
+    }
+
+    protected MavenProject getProject()
+    {
+        return project;
+    }
+
+    /**
+     * @param p not null maven project
+     * @return the list of directories where compiled classes are placed for 
the given project. These dirs are
+     *         added in the javadoc classpath.
+     */
+    protected List<String> getProjectBuildOutputDirs( MavenProject p )
+    {
+        if ( StringUtils.isEmpty( p.getBuild().getOutputDirectory() ) )
+        {
+            return Collections.emptyList();
+        }
+
+        return Collections.singletonList( p.getBuild().getOutputDirectory() );
+    }
+
+    /**
+     * @param p not null maven project
+     * @return the list of source paths for the given project
+     */
+    protected List<String> getProjectSourceRoots( MavenProject p )
+    {
+        if ( "pom".equals( p.getPackaging().toLowerCase() ) )
+        {
+            return Collections.emptyList();
+        }
+
+        return ( p.getCompileSourceRoots() == null
+            ? Collections.<String>emptyList()
+            : new LinkedList<String>( p.getCompileSourceRoots() ) );
+    }
+
+    /**
+     * @param p not null maven project
+     * @return the list of source paths for the execution project of the given 
project
+     */
+    protected List<String> getExecutionProjectSourceRoots( MavenProject p )
+    {
+        if ( "pom".equals( 
p.getExecutionProject().getPackaging().toLowerCase() ) )
+        {
+            return Collections.emptyList();
+        }
+
+        return ( p.getExecutionProject().getCompileSourceRoots() == null
+            ? Collections.<String>emptyList()
+            : new LinkedList<String>( 
p.getExecutionProject().getCompileSourceRoots() ) );
+    }
+
+    /**
+     * @param p not null maven project
+     * @return the list of artifacts for the given project
+     */
+    protected List<Artifact> getProjectArtifacts( MavenProject p )
+    {
+        return ( p.getCompileArtifacts() == null
+            ? Collections.<Artifact>emptyList()
+            : new LinkedList<Artifact>( p.getCompileArtifacts() ) );
+    }
+
+    /**
+     * @return the current javadoc directory
+     */
+    protected File getJavadocDirectory()
+    {
+        return javadocDirectory;
+    }
+
+    /**
+     * @return the doclint specific checks configuration
+     */
+    protected String getDoclint()
+    {
+        return doclint;
+    }
+
+    /**
+     * @return the title to be placed near the top of the overview summary file
+     */
+    protected String getDoctitle()
+    {
+        return doctitle;
+    }
+
+    /**
+     * @return the overview documentation file from the user parameter or from 
the <code>javadocdirectory</code>
+     */
+    protected File getOverview()
+    {
+        return overview;
+    }
+
+    /**
+     * @return the title to be placed in the HTML title tag
+     */
+    protected String getWindowtitle()
+    {
+        return windowtitle;
+    }
+
+    /**
+     * @return the charset attribute or the value of {@link #getDocencoding()} 
if <code>null</code>.
+     */
+    private String getCharset()
+    {
+        return ( StringUtils.isEmpty( charset ) ) ? getDocencoding() : charset;
+    }
+
+    /**
+     * @return the docencoding attribute or <code>UTF-8</code> if 
<code>null</code>.
+     */
+    private String getDocencoding()
+    {
+        return ( StringUtils.isEmpty( docencoding ) ) ? ReaderFactory.UTF_8 : 
docencoding;
+    }
+
+    /**
+     * @return the encoding attribute or the value of 
<code>file.encoding</code> system property if <code>null</code>.
+     */
+    private String getEncoding()
+    {
+        return ( StringUtils.isEmpty( encoding ) ) ? 
ReaderFactory.FILE_ENCODING : encoding;
+    }
+
+    @Override
+    public void execute()
+        throws MojoExecutionException, MojoFailureException
+    {
+        verifyRemovedParameter( "aggregator" );
+        verifyRemovedParameter( "proxyHost" );
+        verifyRemovedParameter( "proxyPort" );
+
+        doExecute();
+    }
+
+    abstract void doExecute() throws MojoExecutionException, 
MojoFailureException;
+
+    private void verifyRemovedParameter( String paramName )
+    {
+        Object pluginConfiguration = plugin.getPlugin().getConfiguration();
+        if ( pluginConfiguration instanceof Xpp3Dom )
+        {
+            Xpp3Dom configDom = (Xpp3Dom) pluginConfiguration;
+
+            if ( configDom.getChild( paramName ) != null )
+            {
+                throw new IllegalArgumentException( "parameter '" + paramName
+                    + "' has been removed from the plugin, please verify 
documentation." );
+            }
+        }
+    }
+
+    /**
+     * The <a href="package-summary.html">package documentation</a> details the
+     * Javadoc Options used by this Plugin.
+     *
+     * @param unusedLocale the wanted locale (actually unused).
+     * @throws MavenReportException if any
+     */
+    protected void executeReport( Locale unusedLocale )
+        throws MavenReportException
+    {
+        if ( skip )
+        {
+            getLog().info( "Skipping javadoc generation" );
+            return;
+        }
+
+        if ( isAggregator() && !project.isExecutionRoot() )
+        {
+            return;
+        }
+
+        if ( getLog().isDebugEnabled() )
+        {
+            this.debug = true;
+        }
+
+        // NOTE: Always generate this file, to allow javadocs from modules to 
be aggregated via
+        // useDependencySources in a distro module build.
+        try
+        {
+            buildJavadocOptions();
+        }
+        catch ( IOException e )
+        {
+            throw new MavenReportException( "Failed to generate javadoc 
options file: " + e.getMessage(), e );
+        }
+
+        List<String> sourcePaths = getSourcePaths();
+        List<String> files = getFiles( sourcePaths );
+        if ( !canGenerateReport( files ) )
+        {
+            return;
+        }
+
+        List<String> packageNames = getPackageNames( sourcePaths, files );
+        List<String> filesWithUnnamedPackages = getFilesWithUnnamedPackages( 
sourcePaths, files );
+
+        // 
----------------------------------------------------------------------
+        // Find the javadoc executable and version
+        // 
----------------------------------------------------------------------
+
+        String jExecutable;
+        try
+        {
+            jExecutable = getJavadocExecutable();
+        }
+        catch ( IOException e )
+        {
+            throw new MavenReportException( "Unable to find javadoc command: " 
+ e.getMessage(), e );
+        }
+        setFJavadocVersion( new File( jExecutable ) );
+
+        // 
----------------------------------------------------------------------
+        // Javadoc output directory as File
+        // 
----------------------------------------------------------------------
+
+        File javadocOutputDirectory = new File( getOutputDirectory() );
+        if ( javadocOutputDirectory.exists() && 
!javadocOutputDirectory.isDirectory() )
+        {
+            throw new MavenReportException( "IOException: " + 
getOutputDirectory() + " is not a directory." );
+        }
+        if ( javadocOutputDirectory.exists() && 
!javadocOutputDirectory.canWrite() )
+        {
+            throw new MavenReportException( "IOException: " + 
getOutputDirectory() + " is not writable." );
+        }
+        javadocOutputDirectory.mkdirs();
+
+        // 
----------------------------------------------------------------------
+        // Copy all resources
+        // 
----------------------------------------------------------------------
+
+        copyAllResources( javadocOutputDirectory );
+
+        // 
----------------------------------------------------------------------
+        // Create command line for Javadoc
+        // 
----------------------------------------------------------------------
+
+        Commandline cmd = new Commandline();
+        cmd.getShell().setQuotedArgumentsEnabled( false ); // for Javadoc JVM 
args
+        cmd.setWorkingDirectory( javadocOutputDirectory.getAbsolutePath() );
+        cmd.setExecutable( jExecutable );
+
+        // 
----------------------------------------------------------------------
+        // Wrap Javadoc JVM args
+        // 
----------------------------------------------------------------------
+
+        addMemoryArg( cmd, "-Xmx", this.maxmemory );
+        addMemoryArg( cmd, "-Xms", this.minmemory );
+        addProxyArg( cmd );
+
+        if ( StringUtils.isNotEmpty( additionalJOption ) )
+        {
+            cmd.createArg().setValue( additionalJOption );
+        }
+
+        if ( additionalJOptions != null && additionalJOptions.length != 0 )
+        {
+            for ( String jo : additionalJOptions )
+            {
+                cmd.createArg().setValue( jo );
+            }
+        }
+
+        List<String> arguments = new ArrayList<String>();
+
+        // 
----------------------------------------------------------------------
+        // Wrap Javadoc options
+        // 
----------------------------------------------------------------------
+
+        addJavadocOptions( arguments, sourcePaths );
+
+        // 
----------------------------------------------------------------------
+        // Wrap Standard doclet Options
+        // 
----------------------------------------------------------------------
+
+        if ( StringUtils.isEmpty( doclet ) || useStandardDocletOptions )
+        {
+            addStandardDocletOptions( javadocOutputDirectory, arguments );
+        }
+
+        // 
----------------------------------------------------------------------
+        // Write options file and include it in the command line
+        // 
----------------------------------------------------------------------
+
+        if ( arguments.size() > 0 )
+        {
+            addCommandLineOptions( cmd, arguments, javadocOutputDirectory );
+        }
+
+        // 
----------------------------------------------------------------------
+        // Write packages file and include it in the command line
+        // 
----------------------------------------------------------------------
+
+        // MJAVADOC-365 if includes/excludes are specified, these take 
precedence over the default
+        // package-based mode and force javadoc into file-based mode unless 
subpackages are
+        // specified. Subpackages take precedence over file-based 
include/excludes. Why? Because
+        // getFiles(...) returns an empty list when subpackages are specified.
+        boolean includesExcludesActive =
+            ( sourceFileIncludes != null && !sourceFileIncludes.isEmpty() )
+                || ( sourceFileExcludes != null && 
!sourceFileExcludes.isEmpty() );
+        if ( includesExcludesActive && !StringUtils.isEmpty( subpackages ) )
+        {
+            getLog().warn( "sourceFileIncludes and sourceFileExcludes have no 
effect when subpackages are specified!" );
+            includesExcludesActive = false;
+        }
+        if ( !packageNames.isEmpty() && !includesExcludesActive )
+        {
+            addCommandLinePackages( cmd, javadocOutputDirectory, packageNames 
);
+
+            // 
----------------------------------------------------------------------
+            // Write argfile file and include it in the command line
+            // 
----------------------------------------------------------------------
+
+            if ( !filesWithUnnamedPackages.isEmpty() )
+            {
+                addCommandLineArgFile( cmd, javadocOutputDirectory, 
filesWithUnnamedPackages );
+            }
+        }
+        else
+        {
+            // 
----------------------------------------------------------------------
+            // Write argfile file and include it in the command line
+            // 
----------------------------------------------------------------------
+
+            if ( !files.isEmpty() )
+            {
+                addCommandLineArgFile( cmd, javadocOutputDirectory, files );
+            }
+        }
+
+        // 
----------------------------------------------------------------------
+        // Execute command line
+        // 
----------------------------------------------------------------------
+
+        executeJavadocCommandLine( cmd, javadocOutputDirectory );
+
+        // delete generated javadoc files only if no error and no debug mode
+        // [MJAVADOC-336] Use File.delete() instead of File.deleteOnExit() to
+        // prevent these files from making their way into archives.
+        if ( !debug )
+        {
+            for ( int i = 0; i < cmd.getArguments().length; i++ )
+            {
+                String arg = cmd.getArguments()[i].trim();
+
+                if ( !arg.startsWith( "@" ) )
+                {
+                    continue;
+                }
+
+                File argFile = new File( javadocOutputDirectory, 
arg.substring( 1 ) );
+                if ( argFile.exists() )
+                {
+                    argFile.delete();
+                }
+            }
+
+            File scriptFile = new File( javadocOutputDirectory, 
DEBUG_JAVADOC_SCRIPT_NAME );
+            if ( scriptFile.exists() )
+            {
+                scriptFile.delete();
+            }
+        }
+        if ( applyJavadocSecurityFix )
+        {
+            // finally, patch the Javadoc vulnerability in older Javadoc tools 
(CVE-2013-1571):
+            try
+            {
+                final int patched = fixFrameInjectionBug( 
javadocOutputDirectory, getDocencoding() );
+                if ( patched > 0 )
+                {
+                    getLog().info(
+                        String.format( "Fixed Javadoc frame injection 
vulnerability (CVE-2013-1571) in %d files.",
+                                       patched ) );
+                }
+            }
+            catch ( IOException e )
+            {
+                throw new MavenReportException( "Failed to patch javadocs 
vulnerability: " + e.getMessage(), e );
+            }
+        }
+        else
+        {
+          getLog().info( "applying javadoc security fix has been disabled" );
+        }
+    }
+
+    /**
+     * Method to get the files on the specified source paths
+     *
+     * @param sourcePaths a List that contains the paths to the source files
+     * @return a List that contains the specific path for every source file
+     * @throws MavenReportException {@link MavenReportException}
+     */
+    protected List<String> getFiles( List<String> sourcePaths )
+        throws MavenReportException
+    {
+        List<String> files = new ArrayList<String>();
+        if ( StringUtils.isEmpty( subpackages ) )
+        {
+            String[] excludedPackages = getExcludedPackages();
+
+            for ( String sourcePath : sourcePaths )
+            {
+                File sourceDirectory = new File( sourcePath );
+                JavadocUtil.addFilesFromSource( files, sourceDirectory, 
sourceFileIncludes, sourceFileExcludes,
+                                                excludedPackages );
+            }
+        }
+
+        return files;
+    }
+
+    /**
+     * Method to get the source paths. If no source path is specified in the 
parameter, the compile source roots
+     * of the project will be used.
+     *
+     * @return a List of the project absolute source paths as 
<code>String</code>
+     * @throws MavenReportException {@link MavenReportException}
+     * @see JavadocUtil#pruneDirs(MavenProject, List)
+     */
+    protected List<String> getSourcePaths()
+        throws MavenReportException
+    {
+        List<String> sourcePaths;
+
+        if ( StringUtils.isEmpty( sourcepath ) )
+        {
+            sourcePaths = new ArrayList<String>( JavadocUtil.pruneDirs( 
project, getProjectSourceRoots( project ) ) );
+
+            if ( project.getExecutionProject() != null )
+            {
+                sourcePaths.addAll( JavadocUtil.pruneDirs( project, 
getExecutionProjectSourceRoots( project ) ) );
+            }
+
+            /*
+             * Should be after the source path (i.e. -sourcepath 
'.../src/main/java;.../src/main/javadoc') and
+             * *not* the opposite. If not, the javadoc tool always copies doc 
files, even if -docfilessubdirs is
+             * not setted.
+             */

[... 3818 lines stripped ...]

Reply via email to