JAVADOC(1)

๐Ÿ“ฆ version 25.0.5.0.3.u1, in arch rolling

๐Ÿฆ‹ JAVADOC(1) โ€” the javadoc command, JDK Commands edition ๐Ÿฆ‹

okay so bestie, welcome to javadoc(1) from the JDK Commands set ๐Ÿ’– this is the lil tool that turns your Java source files into actual HTML API docs, and no cap it's lowkey iconic. grab a lil drink, we're going through the whole thing together ๐Ÿซถ


โœจ NAME โœจ

javadoc โ€” generate HTML pages of API documentation from Java source files. that's it, that's the whole vibe ๐Ÿ’…


๐ŸŒธ SYNOPSIS ๐ŸŒธ

javadoc [options] [packagenames] [sourcefiles] [@files]
  • options โ€” the command-line options, separated by spaces. like, all of them. see Standard javadoc Options, Extra javadoc Options, Standard Options for the Standard Doclet, and Extra Options for the Standard Doclet down below ๐Ÿ‘€
  • packagenames โ€” names of the packages you wanna document, separated by spaces, for example java.lang java.lang.reflect java.awt. and if you wanna also document the subpackages, then use the -subpackages option to specify the packages. by default, javadoc looks for the specified packages in the current directory and subdirectories. use the -sourcepath option to specify the list of directories where to look for packages ๐Ÿ“
  • sourcefiles โ€” names of Java source files you wanna document, separated by spaces, for example Class.java Object.java Button.java. by default, javadoc looks for the specified classes in the current directory. but you can specify the full path to the class file and use wildcard characters, for example /home/src/java/awt/Graphics*.java. you can also specify the path relative to the current directory โœจ
  • @files โ€” names of files that contain a list of javadoc tool options, package names, and source file names, in any order ๐ŸŽ€

๐Ÿ’œ DESCRIPTION ๐Ÿ’œ

so the javadoc tool parses the declarations and documentation comments in a set of Java source files, and then processes them using a pluggable back-end called a doclet. pluggable!! main character energy fr ๐Ÿ”ฅ

the standard doclet is the one used by default, and it can produce corresponding HTML pages that describe the public and protected classes, nested and implicitly declared classes (but not anonymous inner classes), interfaces, constructors, methods, and fields. the standard doclet interprets the content of documentation comments according to the JavaDoc Documentation Comment Specification for the Standard Doclet. custom tags in documentation comments are supported by means of taglets. iykyk ๐Ÿงš

you can use the javadoc tool and the standard doclet to generate the API documentation or the implementation documentation for a set of source files ๐Ÿ’–

you can run the javadoc tool on entire packages, individual source files, or both. when documenting entire packages, you can use the -subpackages option either to recursively traverse a directory and its subdirectories, or to pass in an explicit list of package names. when you document individual source files, pass in a list of Java source file names โญ

๐ŸŽ€ Documentation Comments ๐ŸŽ€

the javadoc tool uses the documentation comment, if any, that immediately precedes the beginning of the declaration โ€” whether that's an annotation, a modifier, or the name being declared. if there are multiple documentation comments before the declaration, only the last one (closest to the declaration) will be used. and if there are any documentation comments after the beginning of the declaration, they will be ignored ๐Ÿ™ˆ

to check for any extra or misplaced documentation comments, compile your source code with the javac option -Xlint, or more specifically, -Xlint:dangling-doc-comments. within a source file, you may suppress any warnings generated by these options by using @SuppressWarnings("dangling-doc-comments") on a suitable enclosing declaration ๐Ÿ’…

๐ŸŒˆ Conformance ๐ŸŒˆ

heads up bestie, this part matters ๐Ÿ‘‘

the standard doclet does not validate the content of documentation comments for conformance, nor does it attempt to correct any errors in documentation comments. anyone running javadoc is advised to be aware of the problems that may arise when generating non-conformant output or output containing executable content, such as JavaScript ๐Ÿ˜ญ the standard doclet does provide the DocLint feature to help developers detect common problems in documentation comments; but it's also recommended to check the generated output with any appropriate conformance and other checking tools.

for more details on the conformance requirements for HTML5 documents, see Conformance requirements for authors in the HTML5 Specification: https://html.spec.whatwg.org/multipage/introduction.html#conformance-requirements-for-authors. for more details on security issues related to web pages, see the Open Web Application Security Project (OWASP) page: https://www.owasp.org ๐Ÿฆ‹


โญ OPTIONS โญ

javadoc supports command-line options for both the main javadoc tool and the currently selected doclet. the standard doclet is used if no other doclet is specified ๐Ÿ’–

GNU-style options (that is, those beginning with --) can use an equal sign (=) instead of whitespace characters to separate the name of an option from its value. cute and convenient ๐ŸŽ€

๐Ÿ‘‘ Standard javadoc Options ๐Ÿ‘‘

the following core javadoc options are equivalent to corresponding javac options. see Standard Options in javac for the detailed descriptions of using these options:

  • --add-modules
  • -bootclasspath
  • --class-path, -classpath, or -cp
  • --disable-line-doc-comments
  • --enable-preview
  • -encoding
  • -extdirs
  • --limit-modules
  • --module
  • --module-path or -p
  • --module-source-path
  • --release
  • --source or -source
  • --source-path or -sourcepath
  • --system
  • --upgrade-module-path

the following options are the core javadoc options that are not equivalent to a corresponding javac option ๐Ÿ‘‡

  • -breakiterator โ€” computes the first sentence of the description in a documentation comment using an instance of java.text.BreakIterator to detect sentence breaks. the rules that are used depend on the current locale: for example, for English, a sentence break occurs after a period, question mark, or exclamation point followed by a space when the next word starts with a capital letter. (this is meant to handle most abbreviations, such as "The serial no. is valid", but will not handle "Mr. Smith".) the option is enabled by default if the language of the current locale is not English. if the language of the current locale is English, and the -breakiterator option is not given, a simple default algorithm is used, which just looks for a period followed by a space. in a traditional /**...*/ comment, the search for the end of the first sentence is terminated by an HTML block tag, such as <p>, <pre>, or the tag for a heading. in a Markdown /// comment, the search for the end of the first sentence skips over any characters enclosed in code spans and links, and is terminated by the end of the initial block, as indicated by a blank line or the beginning of the next block, such as a list, thematic break, or an HTML block. the first sentence of the description in a documentation comment is used in summary tables, index pages, and other situations where a short summary is required. for more explicit control in any individual documentation comment, enclose the contents of the first sentence in a {@summary ...} tag, or when applicable, in a {@return ...} tag ๐Ÿ’…
  • -doclet class โ€” generates output by using an alternate doclet. use the fully qualified name. this doclet defines the content and formats the output. if the -doclet option isn't used, then the javadoc tool uses the standard doclet for generating the default HTML format. this class must implement the jdk.javadoc.doclet.Doclet interface. the path to this class is defined by the -docletpath option ๐ŸŒŸ
  • -docletpath path โ€” specifies where to find doclet class files (specified with the -doclet option) and any JAR files it depends on. if the starting class file is in a JAR file, then this option specifies the path to that JAR file. you can specify an absolute path or a path relative to the current directory. if path contains multiple paths or JAR files, then they should be separated with a colon (:) on Linux and macOS, and a semicolon (;) on Windows. this option isn't necessary when the doclet starting class is already in the search path ๐Ÿซถ
  • -exclude pkglist โ€” unconditionally, excludes the specified packages and their subpackages from the list formed by -subpackages. it excludes those packages even when they would otherwise be included by some earlier or later -subpackages option. the following example would include java.io, java.util, and java.math (among others), but would exclude packages rooted at java.net and java.lang. notice that these examples exclude java.lang.ref, which is a subpackage of java.lang. arguments are separated by colons on all operating systems ๐Ÿ˜ค
    • Linux and macOS:
javadoc -sourcepath /home/user/src -subpackages java -exclude java.net:java.lang
  • Windows:
javadoc -sourcepath \user\src -subpackages java -exclude java.net:java.lang
  • --expand-requires (transitive|all) โ€” instructs the javadoc tool to expand the set of modules to be documented. by default, only the modules given explicitly on the command line are documented. supports the following values:
    • transitive: additionally includes all the required transitive dependencies of those modules.
    • all: includes all dependencies.
  • --help, -help, -h, or -? โ€” prints a synopsis of the standard options ๐ŸŒธ
  • --help-extra or -X โ€” prints a synopsis of the set of extra options โœจ
  • -Jflag โ€” passes flag directly to the Java Runtime Environment (JRE) that runs the javadoc tool. for example, if you must ensure that the system sets aside 32 MB of memory in which to process the generated documentation, then you would call the -Xmx option as follows: javadoc -J-Xmx32m -J-Xms32m com.mypackage. be aware that -Xms is optional because it only sets the size of initial memory, which is useful when you know the minimum amount of memory required. there is no space between the J and the flag. use the -version option to report the version of the JRE being used to run the javadoc tool ๐Ÿ’€
javadoc -J-version
java version "17" 2021-09-14 LTS
Java(TM) SE Runtime Environment (build 17+35-LTS-2724)
Java HotSpot(TM) 64-Bit Server VM (build 17+35-LTS-2724, mixed mode, sharing)

okay that's part 1 bestie, and there's more coming so don't go anywhere ๐Ÿฆ‹๐Ÿ’–

  • -locale name โ€” tells the tool which locale to use when it generates your docs ๐Ÿ’… name is a locale name like the ones in the java.util.Locale docs โ€” think en_US (English, United States) or en_US_WIN (the Windows variant). Pick a locale and javadoc grabs that locale's resource files for messages like the strings in the navigation bar, list and table headings, help file contents, comments in the stylesheet.css file, and so on. It also sets the sorting order for alphabetically sorted lists and the sentence separator that figures out where the first sentence ends โœจ Heads up though: -locale does not decide the locale of the documentation comment text written in the source files of your documented classes. That part's on you ๐Ÿซถ
  • -package โ€” shows only package, protected, and public classes and members.
  • -private โ€” shows all classes and members. the whole thing. no hiding ๐Ÿ”ฅ
  • -protected โ€” shows only protected and public classes and members. this one's the default, so if you never say anything, this is what you get ๐Ÿ’…
  • -public โ€” shows only the public classes and members. very main-character-energy-of-you, very exclusive guest list ๐ŸŽ€
  • -quiet โ€” shuts off messages so that only warnings and errors show up, which makes them way easier to actually see ๐Ÿ‘€ It also suppresses the version string. peace and quiet, slay.
  • --show-members value โ€” picks which members get documented (that's fields, methods, or constructors), where value can be any of these:
    • public โ€” shows only public members
    • protected โ€” shows public and protected members; this is the default
    • package โ€” shows public, protected, and package members
    • private โ€” shows all members
  • --show-module-contents value โ€” sets the documentation granularity of module declarations, where value can be api or all.
  • --show-packages value โ€” says which module packages get documented, where value can be exported or all packages.
  • --show-types value โ€” chooses which types (classes, interfaces, etc.) get documented, where value can be any of these:
    • public โ€” shows only public types
    • protected โ€” shows public and protected types; this is the default
    • package โ€” shows public, protected, and package types
    • private โ€” shows all types
  • -subpackages subpkglist โ€” generates docs from the source files in the packages you name and recursively in their subpackages ๐ŸŒ€ This one's lowkey iconic when you're adding new subpackages later, because they get picked up automatically, no extra work. Each package argument is any top-level subpackage (like java) or fully qualified package (like javax.swing) โ€” and it doesn't have to contain source files. Arguments are separated by colons on all operating systems. Wild cards are not allowed, bestie ๐Ÿ™ˆ Use -sourcepath to say where to find the packages. Also note: this option doesn't process source files that live in the source tree but don't belong to the packages. For example, the following commands generates documentation for packages named java and javax.swing and all of their subpackages.
    • Linux and macOS:
javadoc -d docs -sourcepath /home/user/src -subpackages java:javax.swing
  • Windows:
javadoc -d docs -sourcepath \user\src -subpackages java:javax.swing
  • -verbose โ€” gives you more detailed messages while javadoc runs ๐Ÿ—ฃ๏ธ Without -verbose, messages appear for loading the source files, generating the documentation (one message per source file), and sorting. With -verbose, you also get extra messages that specify the number of milliseconds it took to parse each Java source file. timestamps for your parsing era โฑ๏ธ
  • --version โ€” prints version information.
  • -Werror โ€” reports an error if any warnings occur. any warning? boom, error. zero tolerance era ๐Ÿ’€
Heads up bestie ๐Ÿšจ Note that if a Java source file contains an implicitly declared class, then that class and its public, protected, and package members will be documented regardless of the options such as --show-types, --show-members, -private, -protected, -package, and -public. And if --show-members is specified with value private or if -private is used, then all private members of an implicitly declared class will be documented too. it just does that ๐Ÿ’…

โœจ Extra javadoc Options โœจ

Note: The additional options for javadoc are subject to change without notice. don't get too attached ๐Ÿฅฒ

The following additional javadoc options are equivalent to corresponding javac options. See Extra Options in javac for the detailed descriptions of using these options:

  • --add-exports
  • --add-reads
  • --patch-module
  • -Xmaxerrs
  • -Xmaxwarns

๐ŸŽ€ Standard Options for the Standard Doclet ๐ŸŽ€

The following options are provided by the standard doclet. good doclet. best doclet ๐Ÿซถ

  • --add-script file โ€” adds file as an additional JavaScript file to the generated documentation. You can use this option one or more times to specify additional script files. Command-line example:
javadoc --add-script first_script.js --add-script second_script.js pkg_foo
  • --add-stylesheet file โ€” adds file as an additional stylesheet file to the generated documentation. Like its sibling above, it can be used one or more times to specify additional stylesheets included in the documentation. Command-line example:
javadoc --add-stylesheet new_stylesheet_1.css --add-stylesheet new_stylesheet_2.css pkg_foo
  • --allow-script-in-comments โ€” allow JavaScript in documentation comments, and options whose value is html-code. raw code in your comments, go off ๐Ÿงš
  • -author โ€” includes the text of any author tags in the generated documentation.
  • -bottom html-code โ€” sets the text placed at the bottom of each generated page. The text can contain HTML tags and white space, but when it does, the text must be enclosed in quotation marks. Use escape characters for any internal quotation marks within text ๐Ÿ’…
  • -charset name โ€” sets the HTML character set for this document. The name should be a preferred MIME name as specified in the IANA Registry, Character Sets [http://www.iana.org/assignments/character-sets]. For example:
javadoc -charset "iso-8859-1" mypackage

This command inserts the following line, containing a meta element [https://html.spec.whatwg.org/multipage/semantics.html#the-meta-element] in the head of every generated page:

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  • -d directory โ€” the destination directory where javadoc saves the generated HTML files. If you omit the -d option, then the files are saved to the current directory. The directory value can be absolute or relative to the current working directory. Also, the destination directory is automatically created when javadoc runs โ€” it handles that for you, slay ๐ŸŒธ
    • Linux and macOS: For example, the following command generates the documentation for the package com.mypackage and saves the results in the /user/doc/ directory:
javadoc -d /user/doc/ com.mypackage
  • Windows: For example, the following command generates the documentation for the package com.mypackage and saves the results in the \user\doc\ directory:
javadoc -d \user\doc\ com.mypackage
  • -docencoding name โ€” sets the encoding of the generated HTML files. The name should be a preferred MIME name as specified in the IANA Registry, Character Sets [http://www.iana.org/assignments/character-sets]. Three options are available for use in a javadoc encoding command. The -encoding option is used for encoding the files read by javadoc, while -docencoding and -charset are used for encoding the files written by the tool. Of the three available options, at most, only the input and an output encoding option are used in a single encoding command. If you specify both input and output encoding options in a command, they must be the same value โš ๏ธ If you specify neither output option, it defaults to the input encoding. For example:
javadoc -docencoding "iso-8859-1" mypackage
  • -docfilessubdirs โ€” enables deep copying of doc-files directories. Subdirectories and all contents are recursively copied to the destination. For example, the directory doc-files/example/images and all of its contents are copied. Use the -excludedocfilessubdir option to restrict the subdirectories to be copied. deep copy go brrr ๐ŸŒ€
  • -doctitle html-code โ€” the title to place near the top of the overview summary file. The text specified in the title tag is placed as a centered, level-one heading directly beneath the navigation bar. The title tag can contain HTML tags and white space, but when it does, you must enclose the title in quotation marks. Additional quotation marks within the title tag must be escaped. For example, javadoc -doctitle "<b>My Library</b><br>v1.0" com.mypackage.
  • -excludedocfilessubdir name1,name2... โ€” excludes any subdirectories with the given names when recursively copying doc-files subdirectories. See -docfilessubdirs. And for historical reasons, : can be used anywhere in the argument as a separator instead of , ๐Ÿ’…
  • -footer html-code โ€” this option is no longer supported and reports a warning. rip footer, you had a good run ๐Ÿ’€
  • -group name g1,g2... โ€” group the specified packages, or modules when documenting modular code, together in the Overview page. For historical reasons, : can be used as a separator anywhere in the argument instead of ,. organization era ๐Ÿ‘‘
  • -header html-code โ€” the header text to be placed at the top of each output file. The header is placed to the right of the navigation bar. The header can contain HTML tags and white space, but when it does, the header must be enclosed in quotation marks. Use escape characters for internal quotation marks within a header. For example, javadoc -header "<b>My Library</b><br>v1.0" com.mypackage.
  • -helpfile filename โ€” tells javadoc which file holds the text shown when someone clicks the HELP link in the nav bar ๐Ÿซถ. If you don't pass this option at all, the javadoc tool just makes a default page and uses that. easy.
  • -html5 โ€” ngl this one is a total no-op ๐Ÿ’€ it does literally nothing and is only kept around for backwards compatibility. slay for legacy, i guess.
  • --javafx or -javafx โ€” turns on JavaFX functionality โœจ. it's enabled by default if the JavaFX library classes are detected on the module path. so like, it might already be on. vibe check your module path.
  • -keywords โ€” adds HTML keyword <meta> tags to the generated file for each class ๐ŸŽ€. these tags can help search engines that actually look for <meta> tags find the pages. most search engines that crawl the entire Internet don't look at <meta> tags, because pages can misuse them ๐Ÿ™ˆ. but search engines offered by companies that confine their searches to their own website can benefit by looking at <meta> tags. the <meta> tags include the fully qualified name of the class and the unqualified names of the fields and methods. constructors aren't included because they are identical to the class name. for example, the page for the class String includes these keywords:
<meta name="keywords" content="java.lang.String class">
<meta name="keywords" content="CASE_INSENSITIVE_ORDER">
<meta name="keywords" content="length()">
<meta name="keywords" content="isEmpty()">
  • -link url โ€” creates links to existing javadoc generated documentation of externally referenced classes ๐Ÿ”—. the url argument is the absolute or relative URL of the directory that contains the external javadoc generated documentation. you can specify multiple -link options in a specified javadoc tool run to link to multiple documents ๐Ÿ’….

either a package-list or an element-list file must be in this url directory (otherwise, use the -linkoffline option). Note: the package-list and element-list files are generated by the javadoc tool when generating the API documentation and should not be modified by the user ๐Ÿšซ. when you use the javadoc tool to document packages, it uses the package-list file to determine the packages declared in an API. when you generate API documents for modules, the javadoc tool uses the element-list file to determine the modules and packages declared in an API. the javadoc tool reads the names from the appropriate list file and then links to the packages or modules at that URL. when the javadoc tool runs, the url value is copied into the <a href> links that are created. therefore, url must be the URL to the directory and not to a file ๐Ÿ“. you can use an absolute link for url to enable your documents to link to a document on any web site, or you can use a relative link to link only to a relative location. if you use a relative link, then the value you pass in should be the relative path from the destination directory (specified with the -d option) to the directory containing the packages being linked to. when you specify an absolute link, you usually use an HTTP link. however, if you want to link to a file system that has no web server, then you can use a file link. use a file link only when everyone who wants to access the generated documentation shares the same file system ๐Ÿ‘€. in all cases, and on all operating systems, use a slash as the separator, whether the URL is absolute or relative, and https:, http:, or file: as specified in the RFC 1738: Uniform Resource Locators (URL) [https://www.rfc-editor.org/info/rfc1738].

-link https://<host>/<directory>/<directory>/.../<name>
-link http://<host>/<directory>/<directory>/.../<name>
-link file://<host>/<directory>/<directory>/.../<name>
-link <directory>/<directory>/.../<name>
  • --link-modularity-mismatch (warn|info) โ€” controls whether external documentation with wrong modularity (e.g. non-modular documentation for a modular library, or the reverse case) gets reported as a warning (warn) or just a message (info) ๐Ÿง. the default behavior is to report a warning. so bestie, match your modularity or get called out.
  • -linkoffline url1 url2 โ€” this one is a variation of the -link option ๐Ÿฆ‹. they both create links to javadoc generated documentation for externally referenced classes. you can specify multiple -linkoffline options in a specified javadoc tool run.

use the -linkoffline option when:

  • Linking to a document on the web that the javadoc tool can't access through a web connection
  • The package-list or element-list file of the external document either isn't accessible or doesn't exist at the URL location, but does exist at a different location and can be specified by either the package-list or element-list file (typically local).

Note: the package-list and element-list files are generated by the javadoc tool when generating the API documentation and should not be modified by the user ๐Ÿ“Œ. if url1 is accessible only on the World Wide Web, then the -linkoffline option removes the constraint that the javadoc tool must have a web connection to generate documentation. another use of the -linkoffline option is as a work-around to update documents ๐Ÿ”ฅ. after you have run the javadoc tool on a full set of packages or modules, you can run the javadoc tool again on a smaller set of changed packages or modules, so that the updated files can be inserted back into the original set.

for example, the -linkoffline option takes two arguments. the first is for the string to be embedded in the <a href> links, and the second tells the javadoc tool where to find either the package-list or element-list file. the url1 or url2 value is the absolute or relative URL of the directory that contains the external javadoc generated documentation that you want to link to. when relative, the value should be the relative path from the destination directory (specified with the -d option) to the root of the packages being linked to. see url in the -link option ๐Ÿ‘‘

  • --link-platform-properties url โ€” specifies a properties file used to configure links to platform documentation ๐Ÿ’œ. the url argument is expected to point to a properties file containing one or more entries with the following format, where <version> is the platform version as passed to the --release or --source option and <url> is the base URL of the corresponding platform API documentation:
doclet.platform.docs.<version>=<url>

for instance, a properties file containing URLs for releases 15 to 17 might contain the following lines:

doclet.platform.docs.15=https://example.com/api/15/
doclet.platform.docs.16=https://example.com/api/16/
doclet.platform.docs.17=https://example.com/api/17/

if the properties file does not contain an entry for a particular release no platform links are generated ๐Ÿซก. no entry, no link. that's the whole deal.

  • -linksource โ€” creates an HTML version of each source file (with line numbers) and adds links to them from the standard HTML documentation ๐ŸŒˆ. links are created for classes, interfaces, constructors, methods, and fields whose declarations are in a source file. otherwise, links aren't created, such as for default constructors and generated classes.
โš ๏ธ ok so this is the spicy one: this option exposes all private implementation details in the included source files, including private classes, private fields, and the bodies of private methods, regardless of the -public, -package, -protected, and -private options ๐Ÿ˜ญ. unless you also use the -private option, not all private classes or interfaces are accessible through links. each link appears on the name of the identifier in its declaration. for example, the link to the source code of the Button class would be on the word Button:
public class Button extends Component implements Accessible

the link to the source code of the getLabel method in the Button class is on the word getLabel:

public String getLabel()
  • --main-stylesheet file or -stylesheetfile file โ€” specifies the path of an alternate stylesheet file that contains the definitions for the CSS styles used in the generated documentation ๐ŸŽจ. this option lets you override the default. if you do not specify the option, the javadoc tool will create and use a default stylesheet. the file name can be any name and isn't restricted to stylesheet.css. the --main-stylesheet option is the preferred form ๐Ÿ’….

Command-line example:

javadoc --main-stylesheet main_stylesheet.css pkg_foo
  • -nocomment โ€” suppresses the entire comment body, including the main description and all tags, and generate only declarations ๐Ÿซฅ. this option lets you reuse source files that were originally intended for a different purpose so that you can produce skeleton HTML documentation during the early stages of a new project. skeleton era ๐Ÿฆดโœจ
  • -nodeprecated โ€” prevents the generation of any deprecated API in the documentation ๐Ÿšซ. this does what the -nodeprecatedlist option does, and it doesn't generate any deprecated API throughout the rest of the documentation. this is useful when writing code when you don't want to be distracted by the deprecated code ๐Ÿ™ˆ like, respect, we're focusing.
  • -nodeprecatedlist โ€” prevents the generation of the file that contains the list of deprecated APIs (deprecated-list.html) and the link in the navigation bar to that page ๐Ÿงน. the javadoc tool continues to generate the deprecated API throughout the rest of the document. this is useful when your source code contains no deprecated APIs, and you want to make the navigation bar cleaner โœจ (note the difference from -nodeprecated, bestie โ€” this one only kills the list, not the API docs themselves ๐Ÿ‘€)
  • --no-fonts โ€” prevents inclusion of font files in the generated documentation ๐Ÿ”ค. this can be useful if the documentation uses a custom stylesheet which does not use the default fonts. custom fonts, custom vibe ๐ŸŒธ
  • -nohelp โ€” omits the HELP link in the navigation bar at the top of each generated page ๐Ÿšซ๐Ÿ†˜. no help for you. figure it out. (jk, your docs are just that clean.)
  • -noindex โ€” omits the index from the generated documents ๐Ÿ“š. the index is produced by default. so without this flag, index stays. icon behavior.
  • -nonavbar โ€” bestie, this one just says nope to generating the navigation bar and the header. Zero navbar, zero header, just vibes. Important though: -nonavbar has no effect on the -bottom option (that one's doing its own thing). When is it useful? When you literally only care about the content and don't need navigation at all โ€” like when you're converting the files to PostScript or PDF for printing only. Content queen behavior ๐Ÿ’…
  • --no-platform-links โ€” stops it from generating links to platform documentation. Heads up: those links are generated by default, so this is you actively opting out. โœจ
  • -noqualifier name1,name2... โ€” excludes the list of qualifiers from the output. The package name gets removed from places where class or interface names appear. And for historical reasons (iykyk), : can be used anywhere in the argument as a separator instead of ,.

Some iconic examples:

  • -noqualifier all omits all package qualifiers.
  • -noqualifier java.lang:java.io omits the java.lang and java.io package qualifiers.
  • -noqualifier java.*:com.sun.* omits package qualifiers starting with java and com.sun subpackages, but not javax.

Where a package qualifier would appear due to the previous behavior, the name can be suitably shortened. And this rule is in effect whether or not the -noqualifier option is used. ๐Ÿซถ

  • -nosince โ€” omits the Since sections derived from any since tags from the generated documentation. Bye bye, Since sections ๐Ÿ’€
  • -notimestamp โ€” suppresses the time stamp, which is hidden in an HTML comment in the generated HTML near the top of each page. Why would you want that? Bestie, it's lowkey genius: -notimestamp is useful when you want to run the javadoc tool on two source bases and compare them, because it prevents time stamps from causing a difference โ€” which would otherwise be a difference on every page. The time stamp includes the javadoc tool release number, btw. ๐Ÿ•
  • -notree โ€” omits the class and interface hierarchy pages from the generated documents. Those are the pages you reach using the TREE link in the navigation bar (which is produced by default, so this is you saying "not today"). ๐ŸŒณ
  • --override-methods (detail|summary) โ€” documents overridden methods in the detail or summary sections. The default is detail. Pick your fighter โœจ
  • -overview filename โ€” tells the javadoc tool to retrieve the content for the overview documentation from the file specified by filename and place it on the Overview page (overview-summary.html). If filename is a relative path, it's evaluated relative to the current working directory.

The file can be an HTML file (filename ending in .html) or a Markdown file (filename ending in .md). If it's an HTML file, the content for the overview documentation is taken from the <main> element in the file, if one is present, or from the <body> element if there is no <main> element. If it's a Markdown file, the entire content of the file is used. The title on the overview page is set by -doctitle.

Note: older versions of the javadoc tool assumed that any use of this option was for an HTML file, and allowed any extension for the filename. So likeโ€ฆ glow up gap, honestly ๐Ÿ˜ญ
  • -serialwarn โ€” reports compile-time warnings for missing @serial tags. By default, Javadoc reports no serial warnings. Use this option to display the serial warnings, which helps to properly document default serializable fields and writeExternal methods. Gotta keep those serial docs fed and hydrated ๐Ÿ“
  • --since release(,release)* โ€” generates documentation for APIs that were added or newly deprecated in the specified releases.

If the @since tag in the javadoc comment of an element in the documented source code matches a release passed as the option argument, information about the element and the release it was added in is included in a "New API" page. If the "Deprecated API" page is generated and the since element of the java.lang.Deprecated annotation of a documented element matches a release in the option arguments, information about the release the element was deprecated in is added to the "Deprecated API" page.

Releases are compared using case-sensitive string comparison โ€” so don't get cute with capitalization, bestie ๐Ÿ™ˆ

  • --since-label text โ€” specifies the text to use in the heading of the "New API" page. This may contain information about the releases covered in the page, e.g. "New API in release 2.0", or "New API since release 1". Label it and slay ๐ŸŽ€
  • --snippet-path snippetpathlist โ€” specifies the search paths for finding files for external snippets. The snippetpathlist can contain multiple paths by separating them with the platform path separator (; on Windows; : on other platforms). The standard doclet first searches the snippet-files subdirectory in the package containing the snippet, and then searches all the directories in the given list. Priorities, honestly ๐Ÿ‘‘
  • -sourcetab tab-length โ€” specifies the number of spaces each tab uses in the source. Tabs? In this economy? Now you can tell the tool how many spaces to count them as โœจ
  • --spec-base-url url โ€” specifies the base URL for relative URLs in @spec tags, to be used when generating links to any external specifications. It can either be an absolute URL, or a relative URL โ€” in which case it is evaluated relative to the base directory of the generated output files. The default value is equivalent to {@docRoot}/../specs. ๐ŸŒˆ
  • -splitindex โ€” splits the index file into multiple files, alphabetically, one file per letter, plus a file for any index entries that start with non-alphabetical symbols. Organized queen behavior, no cap ๐Ÿ’…
  • --syntax-highlight โ€” enables syntax highlighting for code fragments in {@snippet} tags and <pre><code> elements. For snippets, the lang attribute is used to determine the language of code fragments, which defaults to "java" for inline snippets and is derived from the file extension for external snippets. In HTML <pre><code> tags, the class attribute can be used to specify the language of the contained code fragment as shown below:
<pre><code class="language-java">...</code></pre>

If neither of these attributes is available, automatic language detection is applied. To disable syntax highlighting for a code fragment, set the language to "text" using one of the mechanisms described above. The languages and formats supported by this option are Java, Properties, JSON, HTML and XML. So colorful โœจ๐Ÿ”ฅ

  • -tag name:locations:header โ€” specifies a custom tag with a single argument. For the javadoc tool to spell-check tag names, it's important to include a -tag option for every custom tag that is present in the source code, disabling (with X) those that aren't being output in the current run. The colon (:) is always the separator. To include a colon in the tag name, escape it with a backward slash (\). The -tag option outputs the tag heading, header, in bold, followed on the next line by the text from its single argument. Similar to any block tag, the argument text can contain inline tags, which are also interpreted. The output is similar to standard one-argument tags, such as the @return and @author tags. Omitting a header value causes the name to be the heading.

locations is a list of characters specifying the kinds of declarations in which the tag may be used. The following characters may be used, in either uppercase or lowercase:

  • A: all declarations
  • C: constructors
  • F: fields
  • M: methods
  • O: the overview page and other documentation files in doc-files subdirectories
  • P: packages
  • S: modules
  • T: types (classes and interfaces)
  • X: nowhere: the tag is disabled, and will be ignored

The order in which tags are given on the command line will be used as the order in which the tags appear in the generated output. You can include standard tags in the order given on the command line by using the -tag option with no locations or header. Custom tag supremacy ๐Ÿท๏ธ

  • -taglet class โ€” specifies the fully qualified name of the taglet used in generating the documentation for that tag. Use the fully qualified name for the class value. This taglet also defines the number of text arguments that the custom tag has. The taglet accepts those arguments, processes them, and generates the output.

Taglets are useful for block or inline tags. They can have any number of arguments and implement custom behavior, such as making text bold, formatting bullets, writing out the text to a file, or starting other processes. Taglets can only determine where a tag should appear and in what form. All other decisions are made by the doclet. A taglet can't do things such as remove a class name from the list of included classes. However, it can execute side effects, such as printing the tag's text to a file or triggering another process. Use the -tagletpath option to specify the path to the taglet.

The following example inserts the To Do taglet after Parameters and ahead of Throws in the generated pages:

-taglet com.sun.tools.doclets.ToDoTaglet
-tagletpath /home/taglets
-tag return
-tag param
-tag todo
-tag throws
-tag see

Alternately, you can use the -taglet option in place of its -tag option, but that might be difficult to read. Fair warning bestie ๐Ÿ˜ญ

  • -tagletpath tagletpathlist โ€” specifies the search paths for finding taglet class files. The tagletpathlist can contain multiple paths by separating them with the platform path separator (; on Windows; : on other platforms). The javadoc tool searches all subdirectories of the specified paths. It's giving thorough ๐Ÿงš
  • -top html-code โ€” specifies the text to be placed at the top of each output file. That's it, that's the option โ€” top of every file, iconic placement ๐Ÿ‘‘
  • -use โ€” creates class and package usage pages, bestie. It includes one Use page for each documented class and package. That page describes what packages, classes, methods, constructors, and fields use any API of the specified class or package. If you've got class C, the things that use class C would include subclasses of C, fields declared as C, methods that return C, and methods and constructors with parameters of type C. For example, you can look at the Use page for the String type. Because the getName method in the java.awt.Font class returns type String, the getName method uses String and so the getName method appears on the Use page for String. This documents only uses of the API, not the implementation. When a method uses String in its implementation, but doesn't take a string as an argument or return a string, that isn't considered a use of String. To access the generated Use page, go to the class or package and click the USE link in the navigation bar. ๐Ÿ’…
  • -version โ€” includes the text of any version tags in the generated documentation. This text is omitted by default. Note: to find out what version of the javadoc tool you are using, use the --version option (with two hyphens). ๐Ÿ‘‘
  • -windowtitle title โ€” specifies the title to be placed in the HTML <title> tag. The text specified in the title tag appears in the window title and in any browser bookmarks (favorite places) that someone creates for this page. This title should not contain any HTML tags because a browser will not interpret them correctly. Use escape characters on any internal quotation marks within the title tag. If the -windowtitle option is omitted, then the javadoc tool uses the value of the -doctitle option for the -windowtitle option. For example, javadoc -windowtitle "My Library" com.mypackage. โœจ

โœจ Extra Options for the Standard Doclet โœจ

Okay so these next ones are additional options provided by the standard doclet, and they're subject to change without notice. Additional options are less commonly used or are otherwise regarded as advanced. ๐Ÿซถ

  • --date date-and-time โ€” specifies the value to be used to timestamp the generated pages, in ISO 8601 format (https://www.iso.org/iso-8601-date-and-time-format.html). The specified value must be within 10 years of the current date and time. It is an error to specify both -notimestamp and --date. Using a specific value means the generated documentation can be part of a reproducible build (https://reproducible-builds.org/). If the option is not given, the default value is the current date and time. For example:
javadoc --date 2022-02-01T17:41:59-08:00 mypackage
  • --legal-notices (default|none|directory) โ€” specifies the location from which to copy legal files to the generated documentation. If the option is not specified or is used with the value default, the files are copied from the default location. If the argument is used with value none, no files are copied. Every other argument is interpreted as directory from which to copy the legal files. ๐ŸŽ€
  • --no-frames โ€” this option is no longer supported and reports a warning. ๐Ÿ’€
  • -Xdoclint โ€” enables recommended checks for problems in documentation comments. By default, the -Xdoclint option is enabled. Disable it with the option -Xdoclint:none. For more details, see DocLint. ๐Ÿ”ฅ
  • -Xdoclint:flag,flag,... โ€” enables or disables specific checks for different kinds of issues in documentation comments. Each flag can be one of all, none, or [-]group where group has one of the following values: accessibility, html, missing, reference, syntax. For more details on these values, see DocLint Groups. When specifying two or more flags, you can either use a single -Xdoclint:... option, listing all the desired flags, or you can use multiple options giving one or more flag in each option. For example, use either of the following commands to check for the HTML, syntax, and accessibility issues in the file MyFile.java. ๐Ÿฆ‹
javadoc -Xdoclint:html -Xdoclint:syntax -Xdoclint:accessibility MyFile.java
javadoc -Xdoclint:html,syntax,accessibility MyFile.java

The following examples illustrate how to change what DocLint reports:

  • -Xdoclint:none โ€” disables all checks.
  • -Xdoclint:group โ€” enables group checks.
  • -Xdoclint:all โ€” enables all groups of checks.
  • -Xdoclint:all,-group โ€” enables all checks except group checks.

For more details, see DocLint. ๐ŸŒธ

  • -Xdoclint/package:[-]packages โ€” enables or disables checks in specific packages. packages is a comma separated list of package specifiers. A package specifier is either a qualified name of a package or a package name prefix followed by *, which expands to all subpackages of the given package. Prefix the package specifier with - to disable checks for the specified packages. For more details, see DocLint. ๐Ÿงš
  • -Xdocrootparent url โ€” replaces all @docRoot items followed by /.. in documentation comments with url. ๐Ÿ’œ

๐ŸŽ€ DOCLINT ๐ŸŽ€

okay so picture this: DocLint is the bestie who reads your doc comments and is like "girl. we need to talk." it checks for possible problems in documentation comments, and problems get reported as warnings or errors depending on how serious they are ๐Ÿ’…

like, a missing comment? that's just bad style, that deserves a lil warning ๐Ÿ™ˆ but a link to an unknown Java declaration? that's serious business, that's an error. periodt.

problems are organized into groups, and you can use options to enable or disable messages in one or more groups. and inside your source code, you can suppress messages in one or more groups by using @SuppressWarnings annotations. iconic.

when it's invoked from javadoc, by default DocLint checks all the comments that are used in the generated documentation. so it relies on your other command-line options to figure out which declarations โ€” and which corresponding documentation comments โ€” actually get included. heads up though: this may mean that even comments on some private members of serializable classes get checked too, if those members need to be documented in the generated Serialized Forms page ๐Ÿ‘€

in contrast, when DocLint is invoked from javac, it solely relies on the various -Xdoclint... options to determine which documentation comments to check.

and ngl? DocLint doesn't attempt to fix invalid input. it just reports it. not a therapist, just a messenger ๐Ÿ˜ญ

Note: DocLint doesn't guarantee the completeness of these checks. in particular, it isn't a full HTML compliance checker. the goal is just to report common errors in a convenient manner. lowkey humble of it.

โœจ Groups โœจ

the checks DocLint performs are organized into groups, and the warnings and errors in each group can be enabled or disabled with command-line options, or suppressed with @SuppressWarnings annotations.

the groups are as follows, bestie:

  • accessibility โ€” checks for issues related to accessibility. for example, no alt attribute specified in an <img> element, or no caption or summary attributes specified in a <table> element.

issues are reported as errors if a downstream validation tool might be expected to report an error in the files generated by javadoc.

for reference, see the Web Content Accessibility Guidelines (https://www.w3.org/WAI/standards-guidelines/wcag/).

  • html โ€” detects common high-level HTML issues. for example, putting block elements inside inline elements, or not closing elements that require an end tag. truly giving chaos ๐ŸŒช๏ธ

issues are reported as errors if a downstream validation tool might be expected to report an error in the files generated by javadoc.

for reference, see the HTML Living Standard (https://html.spec.whatwg.org/multipage/).

  • missing โ€” checks for missing documentation comments or tags. for example, a missing comment on a class declaration, or a missing @param or @return tag in the comment for a method declaration.

issues related to missing items are typically reported as warnings because they are unlikely to be reported as errors by downstream validation tools that may be used to check the output generated by javadoc.

  • reference โ€” checks for issues relating to the references to Java API elements from documentation comment tags. for example, the reference in @see or {@link ...} cannot be found, or a bad name is given for @param or @throws.

issues are typically reported as errors because while the issue may not cause problems in the generated files, the author has likely made a mistake that will lead to incorrect or unexpected documentation. we've all been there ๐Ÿซถ

  • syntax โ€” checks for low-level syntactic issues in documentation comments. for example, unescaped angle brackets (< and >) and ampersands (&) and invalid documentation comment tags.

issues are typically reported as errors because the issues may lead to incorrect or unexpected documentation.


๐ŸŒธ Suppressing Messages ๐ŸŒธ

DocLint checks for and recognizes two strings that may be present in the arguments for an @SuppressWarnings annotation:

  • doclint
  • doclint:LIST

where LIST is a comma-separated list of one or more of accessibility, html, missing, reference, syntax.

the names in LIST are the same group names supported by the command-line -Xdoclint option for javac and javadoc. (this is the same convention honored by the javac -Xlint option and the corresponding names supported by @SuppressWarnings. iykyk ๐Ÿ’ซ)

the names in LIST can equivalently be specified in separate arguments of the annotation. for example, the following are equivalent:

  • @SuppressWarnings("doclint:accessibility,missing")
  • @SuppressWarnings("doclint:accessibility", "doclint:missing")

when DocLint detects an issue in a documentation comment, it checks for the presence of @SuppressWarnings on the associated declaration and on all lexically enclosing declarations. the issue will be ignored if any such annotation is found containing the simple string doclint or the longer form doclint:LIST where LIST contains the name of the group for the issue. slay, silenced ๐Ÿ”‡

Note: as with other uses of @SuppressWarnings, using the annotation on a module or package declaration only affects that declaration; it does not affect the contents of the module or package in other source files. no sneaky spillover, bestie.

All messages related to an issue are suppressed by the presence of an appropriate @SuppressWarnings annotation โ€” this includes errors as well as warnings. yes, even the errors, gone, poof โœจ

Note: it is only possible to suppress messages. if an annotation of @SuppressWarnings("doclint") is given on a top-level declaration, all DocLint messages for that declaration and any enclosed declarations will be suppressed; it is not possible to selectively re-enable messages for issues in enclosed declarations. one-way street, unfortunately ๐Ÿ’€

๐Ÿฆ‹ Comparison with downstream validation tools ๐Ÿฆ‹

so DocLint is a utility built into javac and javadoc that checks the content of documentation comments, as found in source files. in contrast, downstream validation tools can be used to validate the output generated from those documentation comments by javadoc and the standard doclet.

although there's some overlap in functionality, the two mechanisms are different and each has its own strengths and weaknesses. main character energy vs. supporting cast, basically ๐Ÿ‘‘

  • downstream validation tools can check the end result of any generated documentation, as it will be seen by the end user. this includes content from all sources โ€” documentation comments, the standard doclet itself, user-provided taglets, and content supplied via command-line options. because such tools are analyzing complete HTML pages, they can do more complete checks than DocLint can. but when a problem is found in the generated pages, it can be harder to track down exactly where in the build pipeline the problem needs to be fixed ๐Ÿ˜ฎโ€๐Ÿ’จ
  • DocLint checks the content of documentation comments, in source files. this makes it very easy to identify the exact position of any issues that may be found. DocLint can also detect some semantic errors in documentation comments that downstream tools cannot detect โ€” such as missing comments, using an @return tag in a method returning void, or an @param tag describing a non-existent parameter. but by its nature, DocLint cannot report on problems such as missing links, or errors in user-provided custom taglets, or problems in the standard doclet itself. it also cannot reliably detect errors in documentation comments at the boundaries between content in a documentation comment and content generated by a custom taglet. know your limits, queen ๐ŸŽ€

and that's the whole page, bestie!! ๐Ÿ’– this was JDK 25.0.5.0.3, dated 2026 โ€” go forth and let your doc comments be immaculate โœจ๐Ÿฆ‹๐Ÿ’…

๐Ÿ“ฆ where this page comes from