Javadoc/Javadoc2

弃用: javadoc2 任务只是指向 javadoc 任务,它是为了向后兼容而存在的。由于此任务将在未来版本中删除,强烈建议您使用 javadoc 代替。

描述

使用 javadoc 工具生成代码文档。

源代码目录将被递归扫描以查找要处理的 Java 源代码文件,但只有那些匹配包含规则且不匹配排除规则的文件才会传递给 javadoc 工具。这允许使用通配符在包名称之间进行选择,从而减少冗长并降低随着时间的推移而产生的管理成本。但是,此任务不像 javac 任务那样具有“已更改”文件的概念。这意味着每次运行此任务时都会处理所有包。但是,通常情况下,此任务的使用频率要低得多。

注意: 由于 javadoc 调用 System.exit(),因此 javadoc 无法在与 Apache Ant 相同的 JVM 中运行,否则会破坏功能。出于这个原因,此任务始终会派生 JVM。由于 javadoc 通常是一个重量级应用程序,并且调用频率很低,因此这种开销并不重要。

注意: packagelist 属性允许您在 Ant 文件之外指定要记录的包列表。将所有内容包含在 build.xml 文件中是一个更好的做法。添加此选项是为了更容易地从常规 makefile 迁移,您将在其中使用此选项的 javadoc。在 packagelist 中列出的包不会被检查,因此即使某些包丢失或损坏,任务也会执行。如果您希望从现有的 makefile 转换,请使用此选项。一旦一切正常运行,您应该切换到常规表示法。

注意: 当为包含注释的类生成 JavaDocs 时,您可能会收到 java.lang.ClassCastException: com.sun.tools.javadoc.ClassDocImpl。这是由于 bug 6442982。原因是 javadoc 无法找到所用注释的实现。解决方法是使用 classpathclasspathref 属性或嵌套的 <classpath> 元素,将包含这些实现的 jar(如 JAXBs @XmlType 等)提供给 <javadoc>

注意: 运行 javadoc 时遇到的许多问题都源于命令行过长,即使错误消息没有给出任何提示表明这可能是问题所在。如果您遇到此任务的问题,请尝试首先将 useexternalfile 属性设置为 true

如果您使用多种方法来指定 javadoc 应该在哪里查找源代码,则结果将是所有指定文档的并集。例如,如果您指定 sourcepath 属性以及指向同一目录的嵌套 packageset,则您的 excludepackagenames 属性将不会有任何效果,除非它与 packagesetexclude 模式一致(反之亦然)。

参数

属性 描述 必需
sourcepath 指定在哪里查找源代码文件 至少四个中的一个或嵌套的 <sourcepath><fileset>module<packageset>
sourcepathref 通过 引用 到在其他地方定义的 sourcepath 来指定在哪里查找源代码文件。
sourcefiles 逗号分隔的源代码文件列表,另请参见嵌套的 source 元素。
modulenames 逗号分隔的模块名称列表,另请参见嵌套的 module 元素。自 Ant 1.10.6 起
destdir 输出文件的目标目录 是,除非已指定 doclet
maxmemory 分配给 javadoc JVM 的最大内存量
packagenames 逗号分隔的包文件列表(带终止通配符),另请参见嵌套的 package 元素。
packageList 包含要处理的包的文件的名称
classpath 指定在哪里查找用户类文件
Bootclasspath 覆盖引导类加载器加载的类文件的路径
classpathref 通过 引用 到在其他地方定义的 classpath 来指定在哪里查找用户类文件。
bootclasspathref 通过 引用 到在其他地方定义的 bootclasspath 来覆盖引导类加载器加载的类文件的路径。
Extdirs 覆盖已安装扩展的路径
Overview 从 HTML 文件读取概述文档
access 访问模式:publicprotectedpackageprivate 之一 否;默认值为 protected
Public 仅显示公共类和成员
Protected 显示受保护/公共类和成员(默认)
Package 显示包/受保护/公共类和成员
Private 显示所有类和成员
Old 使用 JDK 1.1 模拟 doclet 生成输出。
注意: 除非您使用的是预 jdk 1.4 外部 javadoc,否则此属性无效。
Verbose 输出有关 javadoc 正在执行的操作的消息
Locale 要使用的区域设置,例如 en_USen_US_WIN
Encoding 源代码文件编码名称
Version 包含 @version 段落
Use 创建类和包使用页面
Author 包含 @author 段落
Splitindex 将索引拆分为每个字母一个文件
Windowtitle 文档的浏览器窗口标题(文本)
Doctitle 包含包索引(第一个)页面的标题(HTML 代码)
Header 包含每个页面的页眉文本(HTML 代码)
Footer 包含每个页面的页脚文本(HTML 代码)
bottom 包含每个页面的底部文本(HTML 代码)
link 创建指向给定 URL 的 javadoc 输出的链接,另请参见嵌套的 link 元素。
linkoffline 通过指定值 url alt-url(以空格作为分隔符)来链接到 url 上的文档,使用 alt-url 上的包列表。嵌套 link 元素的简写形式,其中 offline=true
group 将指定的包分组到概述页面中。格式如 下面 所述,另请参见嵌套的 group 元素。
nodeprecated 不包含 @deprecated 信息
nodeprecatedlist 不生成弃用列表
notree 不生成类层次结构
noindex 不生成索引
nohelp 不生成帮助链接
nonavbar 不生成导航栏
serialwarn 生成有关 @serial 标记的警告
helpfile 指定要使用的 HTML 帮助文件
stylesheetfile 指定要使用的 CSS 样式表
charset 用于跨平台查看生成的文档的字符集
docencoding 输出文件编码名称
doclet 指定用于生成文档的 doclet 的类文件,另请参见嵌套的 doclet 元素。
docletpath 指定使用 -doclet 选项指定的 doclet 类文件的路径。
docletpathref 通过 引用 到在其他地方定义的路径来指定使用 -doclet 选项指定的 doclet 类文件的路径。
additionalparam 允许您向 javadoc 命令行添加其他参数。对 doclet 很有用。包含空格的参数需要用 &quot; 引用,另请参见嵌套的 arg 元素。
failonerror 如果命令以非 0 的返回代码退出,则停止构建过程。
failonwarning 如果发出警告,则停止构建过程,即如果 javadoc 的输出包含单词 warning自 Ant 1.9.4 起
excludepackagenames 逗号分隔的包列表,您不希望为其生成文档,另请参见嵌套的 excludepackage 元素。
defaultexcludes 指示是否应使用默认排除项 (yes|no)。 否;默认值为 yes
useexternalfile 指示是否应将 srcfiles 中指定或作为嵌套 source 元素指定的源代码文件名写入临时文件以缩短命令行。也适用于通过 packagenames 属性或嵌套 package 元素指定的包名称。自 Ant 1.7.0 起,也适用于所有其他命令行选项。(yes|no)。
如果启用,则文件将写入 临时目录
否;默认值为 no
source 启用 javadoc 处理 Java 语言功能。将其设置为 1.4 以记录使用 javac -source 1.4 等编译的代码。 否;默认值可以使用神奇的 ant.build.javac.source 属性提供。
linksource 生成指向源代码文件的超链接。自 Ant 1.6 起。(yes|no)。 否;默认值为 no
breakiterator 使用新的断词器算法。自 Ant 1.6 起。(yes|no)。 否;默认值为 no
noqualifier 启用 -noqualifier 参数,必须为 all 或以冒号分隔的包列表。自 Ant 1.6 起
includenosourcepackages 如果设置为 true,则不包含 Java 源代码但包含 package.html 的包也将被记录。自 Ant 1.6.3 起 否;默认值为 false
executable 指定要使用的特定 javadoc 可执行文件,以代替默认二进制文件(在与 Ant 运行的相同 JDK 中找到)。自 Ant 1.6.3 起注意:您有责任确保此命令支持您希望使用的属性。
docfilessubdirs 启用 doc-files 子目录的深度复制。自 Ant 1.8.0 起 否;默认值为 false
excludedocfilessubdir 如果 docfilessubdirs 为 true,则要排除的 doc-files 子目录的冒号分隔列表。自 Ant 1.8.0 起
postProcessGeneratedJavadocs 是否对生成的 javadoc 进行后处理以减轻 CVE-2013-1571。自 Ant 1.9.2 起
在 Java 7 更新 25 之前的 Oracle JDK 生成的 javadoc 中存在一个可能的框架注入攻击 (详细信息)。当此标志设置为 true 时,Ant 将检查文档是否容易受到攻击,并尝试修复它们。
否;默认值为 true
modulesourcepath 指定在哪里查找模块源代码文件自 Ant 1.10.6 起
modulesourcepathref 通过 引用 到在其他地方定义的 PATH 来指定在哪里查找模块源代码文件。自 Ant 1.10.6 起
modulepath 指定在哪里查找模块文件自 Ant 1.10.6 起
modulepathref 通过 引用 到在其他地方定义的 PATH 来指定在哪里查找模块文件。自 Ant 1.10.6 起

group 属性的格式

参数以逗号分隔。每个单个参数都是 2 个以空格分隔的字符串,第一个是组的标题,第二个是以冒号分隔的包列表。

如果您需要指定多个组,或者组的标题包含逗号或空格字符,则强烈建议使用 嵌套的 group 元素

例如

group="XSLT_Packages org.apache.xalan.xslt*,XPath_Packages org.apache.xalan.xpath*"

作为嵌套元素指定的参数

packageset

一个 DirSet。所有包含 Java 源文件的匹配目录将作为包名传递给 javadoc。包名是通过将目录分隔符转换为点来从目录名创建的。Ant 假设 packageset 的基目录指向包层次结构的根目录。

任务的 packagenamesexcludepackagenamesdefaultexcludes 属性对嵌套的 <packageset> 元素没有影响。

fileset

一个 FileSet。所有匹配的文件将作为源文件传递给 javadoc。Ant 会自动将包含模式 **/*.java(如果 includenosourcepackagestrue,则为 **/package.html)添加到这些文件集中。

嵌套文件集可用于记录默认包中的源代码,或者如果您想从文档中排除某些文件。如果您想记录所有源文件并且不使用默认包,则应使用 packageset,因为这会提高 javadoc 的性能。

任务的 packagenamesexcludepackagenamesdefaultexcludes 属性对嵌套的 <fileset> 元素没有影响。

sourcefiles

用于任意基于文件系统的 资源集合 的容器。所有包含在任何嵌套集合(包括嵌套文件集、文件列表或路径)中的文件将作为源文件传递给 javadoc。

package

packagenames 给出的列表中的一个条目相同。

参数
属性 描述 必需
name 包名(可以是通配符)

excludepackage

excludepackagenames 给出的列表中的一个条目相同。

参数
package 相同。

module

自 Ant 1.10.6 起

modulenames 给出的列表中的一个条目相同。

参数
属性 描述 必需
name 模块名

source

sourcefiles 给出的列表中的一个条目相同。

参数
属性 描述 必需
file 要记录的源文件

doctitle

doctitle 属性相同,但您可以通过这种方式在元素内嵌套文本。

如果嵌套文本包含换行符,则必须使用 useexternalfile 属性并将其设置为 true

header

类似于 <doctitle>

footer

类似于 <doctitle>

bottom

类似于 <doctitle>

link

在给定 URL 处创建指向 javadoc 输出的链接。这与 linklinkoffline 属性的作用相同。您可以使用任一语法(或同时使用两者),但使用嵌套元素,您可以轻松地指定参数的多个出现。

参数
属性 描述 必需
href 您要链接到的外部文档的 URL。这可以是绝对 URL 或相对文件名。
offline true 如果此链接在生成文档时无法在线访问
packagelistLoc 包含外部文档的 package-list 文件的目录的位置 如果 offline 属性为 true,则为两者之一
packagelistURL 包含外部文档的 package-list 文件的目录的 URL
resolveLink 如果 link 属性是相对文件名,Ant 将首先尝试在当前项目的 basedir 相对位置找到该文件,如果找到该文件,则使用 link 属性的绝对 URL,否则它将按原样将文件名传递给 javadoc 命令。 否;默认值为 false

group

将概述页面上的包分隔成您指定的任何组,每个组一个表。这与 group 属性的作用相同。您可以使用任一语法(或同时使用两者),但使用嵌套元素,您可以轻松地指定参数的多个出现。

参数
属性 描述 必需
title 组的标题 是,除非给出嵌套的 <title>
packages 要包含在该组中的包列表。多个包用 : 分隔。 是,除非给出嵌套的 <package>

标题可以指定为具有文本内容的嵌套 <title> 元素,并且包可以列出为嵌套的 <package> 元素,与主任务相同。

doclet

doclet 嵌套元素用于指定 javadoc 将用于处理输入源文件的 doclet。许多标准 javadoc 参数实际上是标准 doclet 的参数。如果这些参数在 javadoc 任务的属性中指定,则它们将传递给在 <doclet> 嵌套元素中指定的 doclet。因此,只有在这些属性可以被使用的 doclet 解释时,才应指定这些属性。

如果 doclet 需要其他参数,则可以在 <doclet> 元素内的 <param> 元素中指定这些参数。这些参数仅限于简单的字符串。下面显示了 doclet 元素的一个示例用法

<javadoc ... >
   <doclet name="theDoclet"
           path="path/to/theDoclet">
      <param name="-foo" value="foovalue"/>
      <param name="-bar" value="barvalue"/>
   </doclet>
</javadoc>

tag

如果您想使用嵌套的 tag 元素指定标准标签,因为您想确定标签的输出顺序,则不能为这些标签设置 description 属性。

参数
属性 描述 必需
name 标签的名称(例如 todo 是,除非指定了 dir 属性
description 标签的描述(例如 To do: 否,javadoc 可执行文件将选择一个默认值,如果未指定此值
enabled 标签是否启用 否;默认值为 true
scope 标签的范围——可以使用它的元素。这是一个逗号分隔的列表,其中包含一些元素:overviewpackagestypesconstructorsmethodsfields 或默认值 all 否;默认为 all
dir 如果指定了此属性,则此元素将表现为一个隐式的 fileset。此文件集包含的文件应在单独的行上包含每个标签定义,如 Javadoc 参考指南 中所述
ejb.bean:t:XDoclet EJB Tag
todo:a:To Do
注意:Javadoc 参考指南在定义的描述部分周围使用双引号。当在文件中使用时,这将不起作用,因为在传递给 javadoc 程序时,定义将再次被引用。
注意:如果指定了此属性,则此元素中的所有其他属性将被忽略。

taglet

taglet 嵌套元素用于指定除 默认 taglet 之外的自定义 taglet

参数
属性 描述 必需
name taglet 类的名称(例如 com.sun.tools.doclets.ToDoTaglet
path 指定 taglet 类搜索路径的路径(例如 /home/taglets)。路径也可以通过嵌套的 <path> 元素指定

sourcepath, classpath, bootclasspath, modulepath, modulesourcepath

Javadocsourcepathclasspathbootclasspathmodulepathmodulesourcepath 属性是 PATH 类结构,也可以通过嵌套的 sourcepathclasspathbootclasspathmodulepathmodulesourcepath 元素分别设置。

arg

自 Ant 1.6 起

使用嵌套的 <arg> 指定其他参数。请参阅 命令行参数

示例

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

与以下相同

<javadoc destdir="docs/api"
         author="true"
         version="true"
         use="true"
         windowtitle="Test API">

  <packageset dir="src" defaultexcludes="yes">
    <include name="com/dummy/test/**"/>
    <exclude name="com/dummy/test/doc-files/**"/>
  </packageset>

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

<javadoc destdir="docs/api"
         author="true"
         version="true"
         use="true"
         windowtitle="Test API">

  <fileset dir="src" defaultexcludes="yes">
    <include name="com/dummy/test/**"/>
    <exclude name="com/dummy/test/doc-files/**"/>
  </fileset>

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