<!DOCTYPE html>
<!--
   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

       https://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.
-->
<html lang="en">

<head>
<link rel="stylesheet" type="text/css" href="../stylesheets/style.css">
<title>Javadoc Task</title>
</head>

<body>

<h2 id="javadoc">Javadoc/<em>Javadoc2</em></h2>
<p><em><u>Deprecation</u>: the <code>javadoc2</code> task simply points to the <code>javadoc</code>
task and it's there for backwards compatibility reasons. Since this task will be removed in future
versions, you are strongly encouraged to use <a href="javadoc.html">javadoc</a> instead.</em></p>
<h3>Description</h3>
<p>Generates code documentation using the <kbd>javadoc</kbd> tool.</p>
<p>The source directory will be recursively scanned for Java source files to process but only those
matching the inclusion rules, and not matching the exclusions rules will be passed to
the <kbd>javadoc</kbd> tool. This allows wildcards to be used to choose between package names,
reducing verbosity and management costs over time. This task, however, has no notion of
&quot;changed&quot; files, unlike the <a href="javac.html">javac</a> task. This means all packages
will be processed each time this task is run. In general, however, this task is used much less
frequently.</p>
<p><strong>Note</strong>: since <kbd>javadoc</kbd>
calls <code class="code">System.exit()</code>, <kbd>javadoc</kbd> cannot be run inside the same
JVM as Apache Ant without breaking functionality. For this reason, this task always forks JVM. This
overhead is not significant since <kbd>javadoc</kbd> is normally a heavy application and will be
called infrequently.</p>
<p><strong>Note</strong>: the <var>packagelist</var> attribute allows you to specify the list of
packages to document outside of the Ant file. It's a much better practice to include everything
inside the <code>build.xml</code> file. This option was added in order to make it easier to migrate
from regular makefiles, where you would use this option of <kbd>javadoc</kbd>.  The packages
listed in <var>packagelist</var> are not checked, so the task performs even if some packages are
missing or broken. Use this option if you wish to convert from an existing makefile. Once things are
running you should then switch to the regular notation.</p>

<p>In the table below, 1.2 means available if your current JVM is exactly of version 1.2 (not 1.3 or
later), 1.4+ for any JVM of at least version 1.4, otherwise any JVM of at least version 1.2 is
acceptable. <em>JDKs prior to 1.4 are no longer supported.</em>  If you specify
the <var>executable</var> attribute it is up to you to ensure that this command supports the
attributes you wish to use.</p>

<p><strong>Note</strong>: When generating the JavaDocs for classes which contains annotations you
maybe get a <code class="output">java.lang.ClassCastException:
com.sun.tools.javadoc.ClassDocImpl</code>.  This is
due <a href="https://bugs.openjdk.java.net/browse/JDK-6442982" target="_top">bug 6442982</a>. The
cause is that <kbd>javadoc</kbd> cannot find the implementations of used annotations.  The
workaround is providing the jars with these implementations (like
JAXBs <code class="code">@XmlType</code>, ...)  to <code>&lt;javadoc&gt;</code>
using <var>classpath</var>, <var>classpathref</var> attributes or
nested <code>&lt;classpath&gt;</code> element.</p>

<p><strong>Note</strong>: many problems with running <kbd>javadoc</kbd> stem from command lines
that have become too long&mdash;even though the error message doesn't give the slightest hint this
may be the problem.  If you encounter problems with the task, try to set
the <var>useexternalfile</var> attribute to <q>true</q> first.</p>

<p>If you use multiple ways to specify where <kbd>javadoc</kbd> should be looking for sources, your
result will be the union of all specified documentations.  If you, e.g., specify
a <var>sourcepath</var> attribute and also a nested <code>packageset</code> both pointing at the
same directory your <var>excludepackagenames</var> attribute won't have any effect unless it agrees
with the <var>exclude</var> patterns of the <code>packageset</code> (and vice versa).</p>

<h3>Parameters</h3>
<table class="attr">
  <tr>
    <th scope="col">Attribute</th>
    <th scope="col">Description</th>
    <th scope="col">Availability on Java</th>
    <th scope="col">Required</th>
  </tr>
  <tr>
    <td>sourcepath</td>
    <td>Specify where to find source files</td>
    <td>all</td>
    <td rowspan="4">At least one of the four or
      nested <code>&lt;sourcepath&gt;</code>, <code>&lt;fileset&gt;</code>,
      <code>module</code> or <code>&lt;packageset&gt;</code></td>
  </tr>
  <tr>
    <td>sourcepathref</td>
    <td>Specify where to find source files by <a href="../using.html#references">reference</a> to a
      <var>sourcepath</var> defined elsewhere.</td>
    <td class="left">all</td>
  </tr>
  <tr>
    <td>sourcefiles</td>
    <td>Comma separated list of source files&mdash;see also the nested <code>source</code>
      element.</td>
    <td class="left">all</td>
  </tr>
  <tr>
    <td>modulenames</td>
    <td>Comma separated list of module names -- see also
    the nested <code>module</code> element. <em>since Ant 1.10.6</em></td>
    <td>all</td>
  </tr>
  <tr>
    <td>destdir</td>
    <td>Destination directory for output files</td>
    <td>all</td>
    <td>Yes, unless a <var>doclet</var> has been specified.</td>
  </tr>
  <tr>
    <td>maxmemory</td>
    <td>Max amount of memory to allocate to the <kbd>javadoc</kbd> JVM</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>packagenames</td>
    <td>Comma separated list of package files (with terminating wildcard)&mdash;see also the
      nested <code>package</code> element.</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>packageList</td>
    <td>The name of a file containing the packages to process</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>classpath</td>
    <td>Specify where to find user class files</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>Bootclasspath</td>
    <td>Override location of class files loaded by the bootstrap class loader</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>classpathref</td>
    <td>Specify where to find user class files by <a href="../using.html#references">reference</a>
      to a <var>classpath</var> defined elsewhere.</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>bootclasspathref</td>
    <td>Override location of class files loaded by the bootstrap class loader
      by <a href="../using.html#references">reference</a> to a <var>bootclasspath</var> defined
      elsewhere.</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>Extdirs</td>
    <td>Override location of installed extensions</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>Overview</td>
    <td>Read overview documentation from HTML file</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>access</td>
    <td>Access mode: one of <q>public</q>, <q>protected</q>, <q>package</q>, or <q>private</q></td>
    <td>all</td>
    <td>No; default is <q>protected</q></td>
  </tr>
  <tr>
    <td>Public</td>
    <td>Show only public classes and members</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>Protected</td>
    <td>Show protected/public classes and members (default)</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>Package</td>
    <td>Show package/protected/public classes and members</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>Private</td>
    <td>Show all classes and members</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>Old</td>
    <td>Generate output using JDK 1.1 emulating doclet.<br/><strong>Note</strong>: <em>Since Ant
      1.8.0</em> this attribute has no effect because <kbd>javadoc</kbd> of Java 1.4 and later
      does not support the <kbd>-1.1</kbd> switch anymore.</td>
    <td>1.2</td>
    <td>No</td>
  </tr>
  <tr>
    <td>Verbose</td>
    <td>Output messages about what <kbd>javadoc</kbd> is doing</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>Locale</td>
    <td>Locale to be used, e.g. <q>en_US</q> or <q>en_US_WIN</q></td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>Encoding</td>
    <td>Source file encoding name</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>Version</td>
    <td>Include <code>@version</code> paragraphs</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>Use</td>
    <td>Create class and package usage pages</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>Author</td>
    <td>Include <code>@author</code> paragraphs</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>Splitindex</td>
    <td>Split index into one file per letter</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>Windowtitle</td>
    <td>Browser window title for the documentation (text)</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>Doctitle</td>
    <td>Include title for the package index (first) page (HTML code)</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>Header</td>
    <td>Include header text for each page (HTML code)</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>Footer</td>
    <td>Include footer text for each page (HTML code)</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>bottom</td>
    <td>Include bottom text for each page (HTML code)</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>link</td>
    <td>Create links to <code>javadoc</code> output at the given URL&mdash;see also the
      nested <code>link</code> element.</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>linkoffline</td>
    <td>Link to docs at <samp><em>url</em></samp> using package list
      at <samp><em>alt-url</em></samp> by specifying a
      value <q><em>url</em>&nbsp;<em>alt-url</em></q> (space as separator). A shorthand for the
      nested <code>link</code> element with <var>offline</var>=<q>true</q>.</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>group</td>
    <td>Group specified packages together in overview page.  The format is as
      described <a href="#groupattribute">below</a>&mdash;see also the nested <code>group</code>
      element.</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>nodeprecated</td>
    <td>Do not include <code>@deprecated</code> information</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>nodeprecatedlist</td>
    <td>Do not generate deprecated list</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>notree</td>
    <td>Do not generate class hierarchy</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>noindex</td>
    <td>Do not generate index</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>nohelp</td>
    <td>Do not generate help link</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>nonavbar</td>
    <td>Do not generate navigation bar</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>serialwarn</td>
    <td>Generate warning about <code>@serial</code> tag</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>helpfile</td>
    <td>Specifies the HTML help file to use</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>stylesheetfile</td>
    <td>Specifies the CSS stylesheet to use</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>charset</td>
    <td>Charset for cross-platform viewing of generated documentation</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>docencoding</td>
    <td>Output file encoding name</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>doclet</td>
    <td>Specifies the class file that starts the doclet used in generating the
      documentation&mdash;see also the nested <code>doclet</code> element.</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>docletpath</td>
    <td>Specifies the path to the doclet class file that is specified with the <kbd>-doclet</kbd>
      option.</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>docletpathref</td>
    <td>Specifies the path to the doclet class file that is specified with the <kbd>-doclet</kbd>
      option by <a href="../using.html#references">reference</a> to a path defined elsewhere.</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>additionalparam</td>
    <td>Lets you add additional parameters to the <kbd>javadoc</kbd> command line. Useful for
      doclets. Parameters containing spaces need to be quoted using &amp;quot;&mdash;see also the
      nested <code>arg</code> element.</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>failonerror</td>
    <td>Stop the build process if the command exits with a return code other than <q>0</q>.</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>failonwarning</td>
    <td>Stop the build process if a warning is emitted&mdash;i.e. if <kbd>javadoc</kbd>'s output
      contains the word <q>warning</q>.  <em>since Ant 1.9.4</em></td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>excludepackagenames</td>
    <td>comma separated list of packages you don't want docs for&mdash;see also the
      nested <code>excludepackage</code> element.</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>defaultexcludes</td>
    <td>indicates whether default excludes should be used (<q>yes|no</q>).</td>
    <td>all</td>
    <td>No; defaults to <q>yes</q></td>
  </tr>
  <tr>
    <td>useexternalfile</td>
    <td>indicates whether the source file names specified in <var>srcfiles</var> or as
      nested <code>source</code> elements should be written to a temporary file to make the command
      line shorter. Also applies to the package names specified via the <var>packagenames</var>
      attribute or nested <code>package</code> elements.  <em>Since Ant 1.7.0</em>, also applies to
      all the other command line options.  (<q>yes|no</q>).<br/>
      If enabled, the file will be written to
      the <a href="../running.html#tmpdir">temporary
      directory</a>.</td>
    <td>all</td>
    <td>No; default is <q>no</q></td>
  </tr>
  <tr>
    <td>source</td>
    <td>Enable <kbd>javadoc</kbd> to handle Java language features.  Set this to <q>1.4</q> to
      document code that compiles using <kbd>javac -source 1.4</kbd>, etc.</td>
    <td>1.4+</td>
    <td>No; default can be provided using the magic
    <a href="../javacprops.html#source"><code>ant.build.javac.source</code></a> property.</td>
  </tr>
  <tr>
    <td>linksource</td>
    <td>Generate hyperlinks to source files.  <em>since Ant 1.6</em>.  (<q>yes|no</q>).</td>
    <td>1.4+</td>
    <td>No; default is <q>no</q></td>
  </tr>
  <tr>
    <td>breakiterator</td>
    <td>Use the new break iterator algorithm.  <em>since Ant 1.6</em>.  (<q>yes|no</q>).</td>
    <td>1.4+</td>
    <td>No; default is <q>no</q></td>
  </tr>
  <tr>
    <td>noqualifier</td>
    <td>Enables the <kbd>-noqualifier</kbd> argument&mdash;must be <q>all</q> or a colon separated
      list of packages.  <em>since Ant 1.6</em>.</td>
    <td>1.4+</td>
    <td>No</td>
  </tr>
  <tr>
    <td>includenosourcepackages</td>
    <td>If set to <q>true</q>, packages that don't contain Java source but
      a <samp>package.html</samp> will get documented as well.  <em>since Ant 1.6.3</em>.</td>
    <td>all</td>
    <td>No; default is <q>false</q></td>
  </tr>
  <tr>
    <td>executable</td>
    <td>Specify a particular <kbd>javadoc</kbd> executable to use in place of the default binary
      (found in the same JDK as Ant is running in).  <em>since Ant 1.6.3</em>.</td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>docfilessubdirs</td>
    <td>Enables deep-copying of <samp>doc-files</samp> subdirectories. <em>since Ant
      1.8.0</em>.</td>
    <td>1.4</td>
    <td>No; defaults to <q>false</q></td>
  </tr>
  <tr>
    <td>excludedocfilessubdir</td>
    <td>Colon-separated list of <samp>doc-files</samp> subdirectories to exclude
      if <var>docfilessubdirs</var> is true. <em>since Ant 1.8.0</em>.</td>
    <td>1.4</td>
    <td>No</td>
  </tr>
  <tr>
    <td>postProcessGeneratedJavadocs</td>
    <td>Whether to post-process the generated javadocs in order to mitigate
      CVE-2013-1571.  <em>Since Ant 1.9.2</em><br/> There is a frame injection attack possible in
      javadocs generated by Oracle JDKs prior to Java 7 update 25
      (<a href="https://www.oracle.com/technetwork/java/javase/7u25-relnotes-1955741.html#jpi-upt"
      target="_top">details</a>).  When this flag is set to <q>true</q>, Ant will check whether the
      docs are vulnerable and will try to fix them.</td>
    <td>1.4</td>
    <td>No; defaults to <q>true</q></td>
  </tr>
  <tr>
    <td>modulesourcepath</td>
    <td>Specify where to find module source files
      <em>since Ant 1.10.6</em></td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>modulesourcepathref</td>
    <td>Specify where to find module source files by <a
      href="../using.html#references">reference</a> to a PATH defined elsewhere.
      <em>since Ant 1.10.6</em></td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>modulepath</td>
    <td>Specify where to find module files
      <em>since Ant 1.10.6</em></td>
    <td>all</td>
    <td>No</td>
  </tr>
  <tr>
    <td>modulepathref</td>
    <td>Specify where to find module files by <a
      href="../using.html#references">reference</a> to a PATH defined elsewhere.
      <em>since Ant 1.10.6</em></td>
    <td>all</td>
    <td>No</td>
  </tr>
</table>

<h4 id="groupattribute">Format of the group attribute</h4>
<p>The arguments are comma-delimited. Each single argument is 2 space-delimited strings, where the
first one is the group's title and the second one a colon delimited list of packages.</p>
<p>If you need to specify more than one group, or a group whose title contains a comma or a space
character, using <a href="#groupelement">nested <code>group</code> elements</a> is highly
recommended.</p>
<p>E.g.:</p>
<pre>group=&quot;XSLT_Packages org.apache.xalan.xslt*,XPath_Packages org.apache.xalan.xpath*&quot;</pre>

<h3>Parameters specified as nested elements</h3>

<h4>packageset</h4>

<p>A <a href="../Types/dirset.html">DirSet</a>.  All matched directories that contain Java source
files will be passed to <kbd>javadoc</kbd> as package names.  Package names are created from the
directory names by translating the directory separator into dots.  Ant assumes the base directory of
the <code>packageset</code> points to the root of a package hierarchy.</p>

<p>The <var>packagenames</var>, <var>excludepackagenames</var> and <var>defaultexcludes</var>
attributes of the task have no effect on the nested <code>&lt;packageset&gt;</code> elements.</p>

<h4>fileset</h4>

<p>A <a href="../Types/fileset.html">FileSet</a>.  All matched files will be passed
to <kbd>javadoc</kbd> as source files.  Ant will automatically add the include
pattern <samp>**/*.java</samp> (and <samp>**/package.html</samp>
if <var>includenosourcepackages</var> is <q>true</q>) to these filesets.</p>

<p>Nested filesets can be used to document sources that are in the default package or if you want to
exclude certain files from documentation.  If you want to document all source files and don't use
the default package, <code>packageset</code>s should be used instead as this increases performance
of <kbd>javadoc</kbd>.</p>

<p>The <var>packagenames</var>, <var>excludepackagenames</var> and <var>defaultexcludes</var>
attributes of the task have no effect on the nested <code>&lt;fileset&gt;</code> elements.</p>

<h4>sourcefiles</h4>

<p>A container for arbitrary file system based <a href="../Types/resources.html#collection">resource
collections</a>.  All files contained in any of the nested collections (this includes nested
filesets, filelists or paths) will be passed to javadoc as source files.</p>

<h4>package</h4>
<p>Same as one entry in the list given by <var>packagenames</var>.</p>

<h5>Parameters</h5>
<table class="attr">
  <tr>
    <th scope="col">Attribute</th>
    <th scope="col">Description</th>
    <th scope="col">Required</th>
  </tr>
  <tr>
    <td>name</td>
    <td>The package name (may be a wildcard)</td>
    <td>Yes</td>
  </tr>
</table>

<h4>excludepackage</h4>
<p>Same as one entry in the list given by <var>excludepackagenames</var>.</p>

<h5>Parameters</h5>
Same as for <code>package</code>.

<h4>module</h4>
<p><em>since Ant 1.10.6</em></p>
<p>Same as one entry in the list given by <code>modulenames</code>.</p>

<h5>Parameters</h5>
<table class="attr">
  <tr>
    <th scope="col">Attribute</th>
    <th scope="col">Description</th>
    <th scope="col">Required</th>
  </tr>
  <tr>
    <td>name</td>
    <td>The module name</td>
    <td>Yes</td>
  </tr>
</table>

<h4>source</h4>
<p>Same as one entry in the list given by <var>sourcefiles</var>.</p>

<h5>Parameters</h5>
<table class="attr">
  <tr>
    <th scope="col">Attribute</th>
    <th scope="col">Description</th>
    <th scope="col">Required</th>
  </tr>
  <tr>
    <td>file</td>
    <td>The source file to document</td>
    <td>Yes</td>
  </tr>
</table>

<h4>doctitle</h4>

<p>Same as the <var>doctitle</var> attribute, but you can nest text inside the element this way.</p>

<p>If the nested text contains line breaks, you must use the <var>useexternalfile</var> attribute
and set it to <q>true</q>.</p>

<h4>header</h4>

<p>Similar to <code>&lt;doctitle&gt;</code>.</p>

<h4>footer</h4>

<p>Similar to <code>&lt;doctitle&gt;</code>.</p>

<h4>bottom</h4>

<p>Similar to <code>&lt;doctitle&gt;</code>.</p>

<h4>link</h4>
<p>Create link to <kbd>javadoc</kbd> output at the given URL. This performs the same role as
the <var>link</var> and <var>linkoffline</var> attributes. You can use either syntax (or both at
once), but with the nested elements you can easily specify multiple occurrences of the
arguments.</p>

<h5>Parameters</h5>
<table class="attr">
  <tr>
    <th scope="col">Attribute</th>
    <th scope="col">Description</th>
    <th scope="col">Required</th>
  </tr>
  <tr>
    <td>href</td>
    <td>The URL for the external documentation you wish to link to.  This can be an absolute URL, or
      a relative file name.</td>
    <td>Yes</td>
  </tr>
  <tr>
    <td>offline</td>
    <td><q>true</q> if this link is not available online at the time of generating the
      documentation</td>
    <td>No</td>
  </tr>
  <tr>
    <td>packagelistLoc</td>
    <td>The location to the directory containing the package-list file for the external
      documentation</td>
    <td rowspan="2">One of the two if the <var>offline</var> attribute is <q>true</q></td>
  </tr>
  <tr>
    <td>packagelistURL</td>
    <td class="left">The URL of the the directory containing the package-list file for the external
      documentation</td>
  </tr>
  <tr>
    <td>resolveLink</td>
    <td>If the <var>link</var> attribute is a relative file name, Ant will first try to locate the
      file relative to the current project's <var>basedir</var> and if it finds a file there use an
      absolute URL for the <var>link</var> attribute, otherwise it will pass the file name verbatim
      to the <kbd>javadoc</kbd> command.</td>
    <td>No; default is <q>false</q></td>
  </tr>
</table>

<h4 id="groupelement">group</h4>
<p>Separates packages on the overview page into whatever groups you specify, one group per
table. This performs the same role as the <var>group</var> attribute. You can use either syntax (or
both at once), but with the nested elements you can easily specify multiple occurrences of the
arguments.</p>

<h5>Parameters</h5>
<table class="attr">
  <tr>
    <th scope="col">Attribute</th>
    <th scope="col">Description</th>
    <th scope="col">Required</th>
  </tr>
  <tr>
    <td>title</td>
    <td>Title of the group</td>
    <td>Yes, unless nested <code>&lt;title&gt;</code> given</td>
  </tr>
  <tr>
    <td>packages</td>
    <td>List of packages to include in that group. Multiple packages are separated with <q>:</q>.</td>
    <td>Yes, unless nested <code>&lt;package&gt;</code>s given</td>
  </tr>
</table>

<p>The title may be specified as a nested <code>&lt;title&gt;</code> element with text contents, and
the packages may be listed with nested <code>&lt;package&gt;</code> elements as for the main
task.</p>

<h4>doclet</h4>
<p>The doclet nested element is used to specify
the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/javadoc/doclet/overview.html"
target="_top">doclet</a> that <kbd>javadoc</kbd> will use to process the input source files. A
number of the standard <kbd>javadoc</kbd> arguments are actually arguments of the standard
doclet. If these are specified in the <code>javadoc</code> task's attributes, they will be passed to
the doclet specified in the <code>&lt;doclet&gt;</code> nested element. Such attributes should only
be specified, therefore, if they can be interpreted by the doclet in use.</p>

<p>If the doclet requires additional parameters, these can be specified
with <code>&lt;param&gt;</code> elements within the <code>&lt;doclet&gt;</code> element. These
parameters are restricted to simple strings. An example usage of the <code>doclet</code> element is
shown below:</p>

<pre>
&lt;javadoc ... &gt;
   &lt;doclet name=&quot;theDoclet&quot;
           path=&quot;path/to/theDoclet&quot;&gt;
      &lt;param name=&quot;-foo&quot; value=&quot;foovalue&quot;/&gt;
      &lt;param name=&quot;-bar&quot; value=&quot;barvalue&quot;/&gt;
   &lt;/doclet&gt;
&lt;/javadoc&gt;</pre>

<h4 id="tagelement">tag</h4>

<p>If you want to specify a standard tag using a nested <code>tag</code> element because you want to
determine the order the tags are output, you must not set the <var>description</var> attribute for
those tags.</p>

<h5>Parameters</h5>
<table class="attr">
  <tr>
    <th scope="col">Attribute</th>
    <th scope="col">Description</th>
    <th scope="col">Required</th>
  </tr>
  <tr>
    <td>name</td>
    <td>Name of the tag (e.g. <q>todo</q>)</td>
    <td>Yes, unless the <var>dir</var> attribute is specified</td>
  </tr>
  <tr>
    <td>description</td>
    <td>Description for tag (e.g. <q>To do:</q>)</td>
    <td>
      No, the <kbd>javadoc</kbd> executable will pick a default if this is not specified
    </td>
  </tr>
  <tr>
    <td>enabled</td>
    <td>Whether or not the tag is enabled</td>
    <td>No; defaults to <q>true</q></td>
  </tr>
  <tr>
    <td>scope</td>
    <td>Scope for the tag&mdash;the elements in which it can be used. This is a comma separated list
      of some of the
      elements: <q>overview</q>, <q>packages</q>, <q>types</q>, <q>constructors</q>, <q>methods</q>, <q>fields</q>
      or the default, <q>all</q>.</td>
    <td>No; defaults to <q>all</q></td>
  </tr>
  <tr>
    <td>dir</td>
    <td>If this attribute is specified, this element will behave as an
      implicit <a href="../Types/fileset.html">fileset</a>. The files included by this fileset
      should contain each tag definition on a separate line, as described in
      the <a href="https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html#javadoctags"
      target="_top">Javadoc reference guide</a>:
      <pre>ejb.bean:t:XDoclet EJB Tag
todo:a:To Do</pre>
      <strong>Note</strong>: The Javadoc reference quide has double quotes around the description
      part of the definition. This will not work when used in a file, as the definition is quoted
      again when given to the <kbd>javadoc</kbd> program.<br/>
      <strong>Note</strong>: If this attribute is specified, all the other attributes in this
      element will be ignored.</td>
    <td>No</td>
  </tr>
</table>

<h4 id="tagletelement">taglet</h4>
<p>The taglet nested element is used to specify
custom <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/javadoc/taglet/overview.html"
target="_top">taglets</a>
beyond <a href="https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html#javadoctags"
target="_top">the default taglets</a>.</p>

<h5>Parameters</h5>
<table class="attr">
  <tr>
    <th scope="col">Attribute</th>
    <th scope="col">Description</th>
    <th scope="col">Required</th>
  </tr>
  <tr>
    <td>name</td>
    <td>The name of the taglet class
      (e.g. <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/javadoc/taglet/ToDoTaglet.java"
      target="_top"><code>com.sun.tools.doclets.ToDoTaglet</code></a>)</td>
    <td>Yes</td>
  </tr>
  <tr>
    <td>path</td>
    <td>A path specifying the search path for the taglet class (e.g. <samp>/home/taglets</samp>).
      The path may also be specified by a nested <code>&lt;path&gt;</code> element</td>
    <td>No</td>
  </tr>
</table>

<h4>sourcepath, classpath, bootclasspath, modulepath, modulesourcepath</h4>
<p><code>Javadoc</code>'s <i>sourcepath</i>, <i>classpath</i>,
<i>bootclasspath</i>, <i>modulepath</i>, and <i>modulesourcepath</i>
attributes are <a href="../using.html#path">PATH like structure</a>
and can also be set via nested <i>sourcepath</i>,
<i>classpath</i>, <i>bootclasspath</i>, <i>modulepath</i>,
and <i>modulesourcepath</i> elements respectively.</p>

<h4>arg</h4>
<p><em>Since Ant 1.6</em></p>
<p>Use nested <code>&lt;arg&gt;</code> to specify additional arguments.
See <a href="../using.html#arg">Command line arguments</a>.</p>

<h3>Example</h3>
<pre>
&lt;javadoc packagenames=&quot;com.dummy.test.*&quot;
         sourcepath=&quot;src&quot;
         excludepackagenames=&quot;com.dummy.test.doc-files.*&quot;
         defaultexcludes=&quot;yes&quot;
         destdir=&quot;docs/api&quot;
         author=&quot;true&quot;
         version=&quot;true&quot;
         use=&quot;true&quot;
         windowtitle=&quot;Test API&quot;&gt;
  &lt;doctitle&gt;&lt;![CDATA[&lt;h1&gt;Test&lt;/h1&gt;]]&gt;&lt;/doctitle&gt;
  &lt;bottom&gt;&lt;![CDATA[&lt;i&gt;Copyright &amp;#169; 2000 Dummy Corp. All Rights Reserved.&lt;/i&gt;]]&gt;&lt;/bottom&gt;
  &lt;tag name=&quot;todo&quot; scope=&quot;all&quot; description=&quot;To do:&quot;/&gt;
  &lt;group title=&quot;Group 1 Packages&quot; packages=&quot;com.dummy.test.a*&quot;/&gt;
  &lt;group title=&quot;Group 2 Packages&quot; packages=&quot;com.dummy.test.b*:com.dummy.test.c*&quot;/&gt;
  &lt;link offline=&quot;true&quot; href=&quot;https://docs.oracle.com/javase/8/docs/api/&quot; packagelistLoc=&quot;C:\tmp&quot;/&gt;
  &lt;link href=&quot;https://docs.oracle.com/javase/8/docs/api/&quot;/&gt;
&lt;/javadoc&gt;</pre>

<p>is the same as</p>

<pre>
&lt;javadoc destdir=&quot;docs/api&quot;
         author=&quot;true&quot;
         version=&quot;true&quot;
         use=&quot;true&quot;
         windowtitle=&quot;Test API&quot;&gt;

  &lt;packageset dir=&quot;src&quot; defaultexcludes=&quot;yes&quot;&gt;
    &lt;include name=&quot;com/dummy/test/**&quot;/&gt;
    &lt;exclude name=&quot;com/dummy/test/doc-files/**&quot;/&gt;
  &lt;/packageset&gt;

  &lt;doctitle&gt;&lt;![CDATA[&lt;h1&gt;Test&lt;/h1&gt;]]&gt;&lt;/doctitle&gt;
  &lt;bottom&gt;&lt;![CDATA[&lt;i&gt;Copyright &amp;#169; 2000 Dummy Corp. All Rights Reserved.&lt;/i&gt;]]&gt;&lt;/bottom&gt;
  &lt;tag name=&quot;todo&quot; scope=&quot;all&quot; description=&quot;To do:&quot;/&gt;
  &lt;group title=&quot;Group 1 Packages&quot; packages=&quot;com.dummy.test.a*&quot;/&gt;
  &lt;group title=&quot;Group 2 Packages&quot; packages=&quot;com.dummy.test.b*:com.dummy.test.c*&quot;/&gt;
  &lt;link offline=&quot;true&quot; href=&quot;https://docs.oracle.com/javase/8/docs/api/&quot; packagelistLoc=&quot;C:\tmp&quot;/&gt;
  &lt;link href=&quot;https://docs.oracle.com/javase/8/docs/api/&quot;/&gt;
&lt;/javadoc&gt;</pre>

<p>or</p>

<pre>
&lt;javadoc destdir=&quot;docs/api&quot;
         author=&quot;true&quot;
         version=&quot;true&quot;
         use=&quot;true&quot;
         windowtitle=&quot;Test API&quot;&gt;

  &lt;fileset dir=&quot;src&quot; defaultexcludes=&quot;yes&quot;&gt;
    &lt;include name=&quot;com/dummy/test/**&quot;/&gt;
    &lt;exclude name=&quot;com/dummy/test/doc-files/**&quot;/&gt;
  &lt;/fileset&gt;

  &lt;doctitle&gt;&lt;![CDATA[&lt;h1&gt;Test&lt;/h1&gt;]]&gt;&lt;/doctitle&gt;
  &lt;bottom&gt;&lt;![CDATA[&lt;i&gt;Copyright &amp;#169; 2000 Dummy Corp. All Rights Reserved.&lt;/i&gt;]]&gt;&lt;/bottom&gt;
  &lt;tag name=&quot;todo&quot; scope=&quot;all&quot; description=&quot;To do:&quot;/&gt;
  &lt;group title=&quot;Group 1 Packages&quot; packages=&quot;com.dummy.test.a*&quot;/&gt;
  &lt;group title=&quot;Group 2 Packages&quot; packages=&quot;com.dummy.test.b*:com.dummy.test.c*&quot;/&gt;
  &lt;link offline=&quot;true&quot; href=&quot;https://docs.oracle.com/javase/8/docs/api/&quot; packagelistLoc=&quot;C:\tmp&quot;/&gt;
  &lt;link href=&quot;https://docs.oracle.com/javase/8/docs/api/&quot;/&gt;
&lt;/javadoc&gt;</pre>

</body>
</html>
