\input texinfo @c -*-texinfo-*-

@c %**start of header
@setfilename cp-tools.info
@settitle GNU Classpath Tools Guide
@c %**end of header

@copying
This file documents the Tools included in a standard distribution of the GNU
Classpath project deliverables.

Copyright @copyright{} 2006, 2007 Free Software Foundation, Inc.

@quotation
Permission is granted to make and distribute verbatim copies of this document provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this document under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation.
@end quotation
@end copying

@c Common macros to support generating man pages:

@macro gcctabopt{body}
@code{\body\}
@end macro
@macro gccoptlist{body}
@smallexample
\body\
@end smallexample
@end macro

@ifinfo
@ifnotplaintext
@setchapternewpage on

@dircategory GNU Libraries
@direntry
* Classpath Tools: (cp-tools).  GNU Classpath Tools Guide
@end direntry
@end ifnotplaintext
@end ifinfo

@titlepage
@title GNU Classpath Tools Guide
@author The GNU Classpath Team

@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage

@contents

@ifinfo
@node Top, Applet Tools, (dir), (dir)
@top GNU Classpath Tools Guide

This document contains important information you need to know in order to use
the tools included in the GNU Classpath project deliverables.

The Tools aim at providing a free replacement, similar in their behavior, to
their counter-parts found in the Reference Implementation (RI) of the Java
Software Development Kit (SDK).

@end ifinfo

@menu
* Applet Tools::               Work with applets
* Security Tools::             Work securely with Java applications
* Other Tools::                Other tools in classpath
* I18N Issues::                How to add support for non-English languages

@detailmenu
 --- The Detailed Node Listing ---

Applet Tools

* appletviewer Tool::          Load applets
* gcjwebplugin::               Load applets in a web browser

Security Tools

* jarsigner Tool::             Sign and verify .JAR files
* keytool Tool::               Manage private keys and public certificates

jarsigner Tool

* Common jarsigner Options::   Options used when signing or verifying a file
* Signing Options::            Options only used when signing a .JAR file
* Verification Options::       Options only used when verifying a .JAR file

keytool Tool

* Getting Help::               How to get help with keytool commands
* Common keytool Options::     Options used in more than one command
* Distinguished Names::        X.500 Distinguished Names used in certificates
* Add/Update Commands::        Commands for adding data to a Key Store
* Export Commands::            Commands for exporting data from a Key Store
* Display Commands::           Commands for displaying data in a Key Store
* Management Commands::        Commands for managing a Key Store

Add/Update Commands

* Command -genkey::            Generate private key and self-signed certificate
* Command -import::            Import certificates and certificate replies
* Command -selfcert::          Generate self-signed certificate
* Command -cacert::            Import a CA Trusted Certificate
* Command -identitydb::        Import JDK-1 style identities

Export Commands

* Command -certreq::           Generate Certificate Signing Requests (CSR)
* Command -export::            Export a certificate in a Key Store

Display Commands

* Command -list::              Display information about one or all Aliases
* Command -printcert::         Print a certificate or a certificate fingerprint

Management Commands

* Command -keyclone::          Clone a Key Entry in a Key Store
* Command -storepasswd::       Change the password protecting a Key Store
* Command -keypasswd::         Change the password protecting a Key Entry
* Command -delete::            Remove an entry in a Key Store

Other Tools

* jar Tool::                   Archive tool for Java archives
* javah Tool::                 A java header compiler
* gcjh Tool::                  A java header compiler (old version)
* native2ascii Tool::          An encoding converter
* orbd Tool::                  An object request broker daemon
* serialver Tool::             A serial version command
* rmid Tool::                  RMI activation daemon
* rmiregistry Tool::           Remote object registry
* tnameserv Tool::             Naming service
* gjdoc Tool::                 Documenation generator tool.

Generating HTML Documentation

* Invoking the Standard Doclet::   How to generate HTML documentation.
* Invoking a Custom Doclet::       How to run third-party and other 
                                   built-in Doclets.

* Option Summary by Type::         Brief list of all options, grouped by type.
* Gjdoc Option Summary::           List of all options accepted by Gjdoc.

* Source Set Options::      Select the set of source codes to run Gjdoc on.
* Source Format Options::   Specify the format of the source codes to document.

* Interlinking Options::    Connection your documentation with other projects.
* Output Control Options::  Specify the target directory and locale, and more.
* Generation Options::      Select which pieces of information to generate.
* Decoration Options::      Add or modify some titles, headers and footers or
                            override/amend static resources like stylesheets.
* Taglet Options::          Define your own javadoc @@tags.

* Virtual Machine Options:: Controlling the kind of output:
                            an executable, object files, assembler files,
                            or preprocessed source.
* Verbosity Options::
* Doclet Options::

* Other Doclets::           Generating Other Output Types. 

* Built-in Doclets::        Using the Built-in Doclets.
* Using XmlDoclet::
* Using TexiDoclet::
* Using IspellDoclet::
* Using DebugDoclet::

* Third-party Doclets::     Using Third-Party Doclets.
* DocBook Doclet::
* PDFDoclet::
* JUnitDoclet::

* Gjdoc Concepts::          Advanced Concepts.
* Writing Doclets::

* Doclet Invocation Interface::    Implementing the Doclet Invocation Interface
* Using AbstractDoclet::           Deriving Your Doclet from AbstractDoclet.
* GNU Doclet SPI::                 Preparing the GNU Doclet Service Provider
                                   Interface.

* Taglets::                        Adding Custom Tags to the Documentation.
* XHTML Fragments::                Well-Formed Documentation Fragments.
* First Sentence Detector::        How Gjdoc Determines where the First
                                   Sentence Ends.
* Adding Custom Resources::        Adding Images and Other Resources.

I18N Issues

* Language Resources::         Where resources are located
* Message Formats::            How messages are internationalized

@end detailmenu
@end menu

@comment ----------------------------------------------------------------------

@node Applet Tools, Security Tools, Top, Top
@comment node-name, next, previous, up
@chapter Applet Tools

Two Applet Tools are available with GNU Classpath: @b{appletviewer}
and @b{gcjwebplugin}.

To avoid conflicts with other implementations, the appletviewer
executable is called ``gappletviewer''.

@menu
* appletviewer Tool::          Load applets
* gcjwebplugin::               Load applets in a web browser
@end menu

If while using these tools you think you found a bug, then please report it at @uref{http://www.gnu.org/software/classpath/bugs.html,classpath-bugs}.

@comment ----------------------------------------------------------------------

@node appletviewer Tool, gcjwebplugin, Applet Tools, Applet Tools
@comment node-name, next, previous, up
@section The @code{appletviewer} Tool
@c man title gappletviewer Load and runs an applet

SYNOPSIS

@c man begin SYNOPSIS gappletviewer
appletviewer [@var{OPTION}]@dots{} @var{URL}@dots{} @var{@*}

appletviewer [@var{OPTION}]@dots{} @option{-code} @var{CODE} @var{@*}

appletviewer [@var{OPTION}]@dots{} @option{-plugin} @var{INPUT},@var{OUTPUT}
@c man end

DESCRIPTION
@c man begin DESCRIPTION gappletviewer
The @command{appletviewer} tool loads and runs an applet.

Use the first form to test applets specified by tag.  The URL should
resolve to an HTML document from which the @command{appletviewer} will
extract applet tags.  The APPLET, EMBED and OBJECT tags are supported.
If a given document contains multiple applet tags, all the applets
will be loaded, with each applet appearing in its own window.
Likewise, when multiple URLs are specified, each applet tag instance
is given its own window.  If a given document contains no recognized
tags the @command{appletviewer} does nothing.

@smallexample
appletviewer http://www.gnu.org/software/classpath/
@end smallexample

Use the second form to test an applet in development.  This form
allows applet tag attributes to be supplied on the command line.  Only
one applet may be specified using the @option{-code} option.  The
@option{-code} option overrides the URL form -- any URLs specified will
be ignored.

@smallexample
appletviewer -code Test.class -param datafile,data.txt
@end smallexample

@command{gcjwebplugin} uses the third form to communicate with the
@command{appletviewer} through named pipes.
@c man end

@c man begin OPTIONS gappletviewer
URL OPTIONS
@table @gcctabopt
@item -debug
This option is not yet implemented but is provided for compatibility.

@item -encoding @var{CHARSET}
Use this option to specify an alternate character encoding for the
specified HTML page.

@end table

APPLET TAG OPTIONS
@table @gcctabopt
@item -code @var{CODE}
Use the @option{-code} option to specify the value of the applet tag
@var{CODE} attribute.

@item -codebase @var{CODEBASE}
Use the @option{-codebase} option to specify the value of the applet tag
@var{CODEBASE} attribute.

@item -archive @var{ARCHIVE}
Use the @option{-archive} option to specify the value of the applet tag
@var{ARCHIVE} attribute.

@item -width @var{WIDTH}
Use the @option{-width} option to specify the value of the applet tag
@var{WIDTH} attribute.

@item -height @var{HEIGHT}
Use the @option{-height} option to specify the value of the applet tag
@var{HEIGHT} attribute.

@item -param @var{NAME},@var{VALUE}
Use the @option{-param} option to specify values for the @var{NAME}
and @var{VALUE} attributes of an applet PARAM tag.

@end table

PLUGIN OPTION
@table @gcctabopt
@item -plugin @var{INPUT},@var{OUTPUT}
@command{gcjwebplugin} uses the @option{-plugin} option to specify the
named pipe the @command{appletviewer} should use for receiving commands
(@var{INPUT}) and the one it should use for sending commands to
@command{gcjwebplugin} (@var{OUTPUT}).

@end table

DEBUGGING OPTION
@table @gcctabopt
@item -verbose
Use the @option{-verbose} option to have the @command{appletviewer} print
debugging messages.

@end table

STANDARD OPTIONS

@table @gcctabopt
@item -help
Use the @option{-help} option to have the @command{appletviewer} print a
usage message, then exit.

@item -version
Use the @option{-version} option to have the @command{appletviewer} print
its version, then exit.

@item -J@var{OPTION}
Use the @option{-J} option to pass @var{OPTION} to the virtual machine that
will run the @command{appletviewer}.  Unlike other options, there must
not be a space between the @option{-J} and @var{OPTION}.

@end table
@c man end

@comment ----------------------------------------------------------------------

@node gcjwebplugin, , appletviewer Tool, Applet Tools
@comment node-name, next, previous, up
@section The @code{gcjwebplugin} Tool

@code{gcjwebplugin} is a plugin that adds applet support to web
browsers.  Currently @code{gcjwebplugin} only supports Mozilla-based
browsers (e.g., Firefox, Galeon, Mozilla).

@comment ----------------------------------------------------------------------

@node Security Tools, Other Tools, Applet Tools, Top
@comment node-name, next, previous, up
@chapter Security Tools

Two Security Tools are available with GNU Classpath:
@command{jarsigner} and @command{keytool}.

To avoid conflicts with other implementations, the jarsigner
executable is called @command{gjarsigner} and the keytool executable is
called @command{gkeytool}.

@menu
* jarsigner Tool::             Sign and verify .JAR files
* keytool Tool::               Manage private keys and public certificates
@end menu

If while using these tools you think you found a bug, then please report it at @uref{http://www.gnu.org/software/classpath/bugs.html,classpath-bugs}.

@comment ----------------------------------------------------------------------

@node jarsigner Tool, keytool Tool, Security Tools, Security Tools
@comment node-name, next, previous, up
@section The @code{jarsigner} Tool
@c man title gjarsigner Java ARchive (JAR) file signing and verification tool

The @command{jarsigner} tool is invoked from the command line, in one
of two forms, as follows:

@example
@c man begin SYNOPSIS gjarsigner
jarsigner [@var{OPTION}]@dots{} @var{FILE} @var{ALIAS}

jarsigner @option{-verify} [@var{OPTION}]@dots{} @var{FILE}
@c man end
@end example

@c man begin DESCRIPTION gjarsigner
When the first form is used, the tool signs the designated JAR file. The second form, on the other hand, is used to verify a previously signed JAR file.

@var{FILE} is the .JAR file to process; i.e., to sign if the first syntax form is used, or to verify if the second syntax form is used instead.

@var{ALIAS} must be a known @i{Alias} of a @i{Key Entry} in the designated @i{Key Store}. The private key material associated with this @i{Alias} is then used for signing the designated .JAR file.
@c man end

@menu
* Common jarsigner Options::   Options used when signing or verifying a file
* Signing Options::            Options only used when signing a .JAR file
* Verification Options::       Options only used when verifying a .JAR file
@end menu

@comment ----------------------------------------------------------------------

@node Common jarsigner Options, Signing Options, jarsigner Tool, jarsigner Tool
@comment node-name, next, previous, up
@c man begin OPTIONS gjarsigner
@subsection Common options

The following options may be used when the tool is used for either signing, or verifying, a .JAR file.

@table @gcctabopt
@item -verbose
Use this option to force the tool to generate more verbose messages, during its processing.

@item -internalsf
When present, the tool will include --which otherwise it does not-- the @code{.SF} file in the @code{.DSA} generated file.

@item -sectionsonly
When present, the tool will include in the @code{.SF} generated file --which otherwise it does not-- a header containing a hash of the whole manifest file.  When that header is included, the tool can quickly check, during verification, if the hash (in the header) matches or not the manifest file.

@item -provider PROVIDER_CLASS_NAME
A fully qualified class name of a @i{Security Provider} to add to the current list of @i{Security Providers} already installed in the JVM in-use. If a provider class is specified with this option, and was successfully added to the runtime --i.e.@: it was not already installed-- then the tool will attempt to remove this @i{Security Provider} before exiting.

@item -help
Prints a help text similar to this one.

@end table
@c man end

@comment ----------------------------------------------------------------------

@node Signing Options, Verification Options, Common jarsigner Options, jarsigner Tool
@comment node-name, next, previous, up
@c man begin OPTIONS gjarsigner
@subsection Signing options

The following options may be specified when using the tool for signing purposes.

@table @gcctabopt
@item -keystore @var{URL}
Use this option to specify the location of the key store to use. The default value is a file URL referencing the file named @file{.keystore} located in the path returned by the call to @code{java.lang.System#getProperty(String)} using @code{user.home} as argument.

If a URL was specified, but was found to be malformed --e.g.@: missing protocol element-- the tool will attempt to use the URL value as a file-name (with absolute or relative path-name) of a key store --as if the protocol was @code{file:}.

@item -storetype @var{STORE_TYPE}
Use this option to specify the type of the key store to use. The default value, if this option is omitted, is that of the property @code{keystore.type} in the security properties file, which is obtained by invoking the static method call @code{getDefaultType()} in @code{java.security.KeyStore}.

@item -storepass @var{PASSWORD}
Use this option to specify the password which will be used to unlock the key store. If this option is missing, the User will be prompted to provide a password.

@item -keypass @var{PASSWORD}
Use this option to specify the password which the tool will use to unlock the @i{Key Entry} associated with the designated @i{Alias}.

If this option is omitted, the tool will first attempt to unlock the @i{Key Entry} using the same password protecting the key store. If this fails, you will then be prompted to provide a password.

@item -sigfile @var{NAME}
Use this option to designate a literal that will be used to construct file names for both the @code{.SF} and @code{.DSA} signature files. These files  will be generated, by the tool, and placed in the @file{META-INF} directory of the signed JAR@.  Permissible characters for @var{NAME} must be in the range "a-zA-Z0-9_-".  All characters will be converted to upper-case ones.

If this option is missing, the first eight characters of the @var{ALIAS} argument will be used. When this is the case, any character in @var{ALIAS} that is outside the permissible range of characters will be replaced by an underscore.

@item -signedjar @var{FILE}
Use this option to specify the file name of the signed JAR@. If this option is omitted, then the signed JAR will be named the same as @var{FILE}; i.e., the input JAR file will be replaced with the signed copy.

@end table
@c man end

@comment ----------------------------------------------------------------------

@node Verification Options, , Signing Options, jarsigner Tool
@comment node-name, next, previous, up
@c man begin OPTIONS gjarsigner
@subsection Verification options

The following options may be specified when using the tool for verification purposes.

@table @gcctabopt
@item -verify
Use this option to indicate that the tool is to be used for verification purposes.

@item -certs
This option is used in conjunction with the @option{-verbose} option. When present, along with the @option{-verbose} option, the tool will print more detailed information about the certificates of the signer(s) being processed.

@end table
@c man end

@comment ----------------------------------------------------------------------

@node keytool Tool, , jarsigner Tool, Security Tools
@comment node-name, next, previous, up
@section The @code{keytool} Tool
@c man title gkeytool Manage private keys and public certificates

@ignore
@c man begin SYNOPSIS gkeytool
keytool [@var{COMMAND}] @dots{}
@c man end
@end ignore

@c man begin DESCRIPTION gkeytool
Cryptographic credentials, in a Java environment, are usually stored in a @i{Key Store}. The Java SDK specifies a @i{Key Store} as a persistent container of two types of objects: @i{Key Entries} and @i{Trusted Certificates}. The security tool @command{keytool} is a Java-based application for managing those types of objects.

A @i{Key Entry} represents the private key part of a key-pair used in Public-Key Cryptography, and a signed X.509 certificate which authenticates the public key part for a known entity; i.e.@: the owner of the key-pair. The X.509 certificate itself contains the public key part of the key-pair.

A @i{Trusted Certificate} is a signed X.509 certificate issued by a trusted entity. The @i{Trust} in this context is relative to the User of the @command{keytool}. In other words, the existence of a @i{Trusted Certificate} in the @i{Key Store} processed by a @command{keytool} command implies that the User trusts the @i{Issuer} of that @i{Trusted Certificate} to also sign, and hence authenticates, other @i{Subjects} the tool may process.

@i{Trusted Certificates} are important because they allow the tool to mechanically construct @i{Chains of Trust} starting from one of the @i{Trusted Certificates} in a @i{Key Store} and ending with a certificate whose @i{Issuer} is potentially unknown. A valid chain is an ordered list, starting with a @i{Trusted Certificate} (also called the @i{anchor}), ending with the target certificate, and satisfying the condition that the @i{Subject} of certificate @code{#i} is the @i{Issuer} of certificate @code{#i + 1}.

The @command{keytool} is invoked from the command line as follows:

@smallexample
keytool [COMMAND] ...
@end smallexample

Multiple @var{COMMAND}s may be specified at once, each complete with its own options. @command{keytool} will parse all the arguments, before processing, and executing, each @code{COMMAND}. If an exception occurs while executing one @var{COMMAND} @command{keytool} will abort. Note however that because the implementation of the tool uses code to parse command line options that also supports GNU-style options, you have to separate each command group with a double-hyphen; e.g

@smallexample
keytool -list -- -printcert -alias mykey
@end smallexample
@c man end

Here is a summary of the commands supported by the tool:

@c man begin OPTIONS gkeytool
@enumerate
@item Add/Update commands
@table @gcctabopt
@item -genkey [@var{OPTION}]@dots{}
Generate a new @i{Key Entry}, eventually creating a new key store.

@item -import [@var{OPTION}]@dots{}
Add, to a key store, @i{Key Entries} (private keys and certificate chains authenticating the public keys) and @i{Trusted Certificates} (3rd party certificates which can be used as @i{Trust Anchors} when building chains-of-trust).

@item -selfcert [@var{OPTION}]@dots{}
Generate a new self-signed @i{Trusted Certificate}.

@item -cacert [@var{OPTION}]@dots{}
Import a CA @i{Trusted Certificate}.

@item -identitydb [@var{OPTION}]@dots{}
@b{NOT IMPLEMENTED YET}.@*
Import a JDK 1.1 style Identity Database.
@end table

@item Export commands
@table @gcctabopt
@item -certreq [@var{OPTION}]@dots{}
Issue a @i{Certificate Signing Request} (CSR) which can be then sent to a @i{Certification Authority} (CA) to issue a certificate signed (by the CA) and authenticating the @i{Subject} of the request.

@item -export [@var{OPTION}]@dots{}
Export a certificate from a key store.
@end table

@item  Display commands
@table @gcctabopt
@item -list [@var{OPTION}]@dots{}
Print one or all certificates in a key store to @code{STDOUT}.

@item -printcert [@var{OPTION}]@dots{}
Print a human-readable form of a certificate, in a designated file, to @code{STDOUT}.
@end table

@item Management commands
@table @gcctabopt
@item -keyclone [@var{OPTION}]@dots{}
Clone a @i{Key Entry} in a key store.

@item -storepasswd [@var{OPTION}]@dots{}
Change the password protecting a key store.

@item -keypasswd [@var{OPTION}]@dots{}
Change the password protecting a @i{Key Entry} in a key store.

@item -delete [@var{OPTION}]@dots{}
Delete a @i{Key Entry} or a @i{Trusted Certificate} from a key store.
@end table
@end enumerate
@c man end

@menu
* Getting Help::               How to get help with keytool commands
* Common keytool Options::     Options used in more than one command
* Distinguished Names::        X.500 Distinguished Names used in certificates
* Add/Update Commands::        Commands for adding data to a Key Store
* Export Commands::            Commands for exporting data from a Key Store
* Display Commands::           Commands for displaying data in a Key Store
* Management Commands::        Commands for managing a Key Store
@end menu

@comment ----------------------------------------------------------------------

@node Getting Help, Common keytool Options, keytool Tool, keytool Tool
@comment node-name, next, previous, up
@subsection Getting help

To get a general help text about the tool, use the @code{-help} option; e.g.

@example
@code{keytool -help}
@end example

To get more specific help text about one of the tool's command use the @code{-help} option for that command; e.g.

@example
@code{keytool -genkey -help}
@end example

In both instances, the tool will print a help text and then will exit the running JVM.

It is worth noting here that the help messages printed by the tool are I18N-ready. This means that if/when the contents of the tool's @i{Message Bundle} properties file are available in languages other than English, you may see those messages in that language.

@comment ----------------------------------------------------------------------

@node Common keytool Options, Distinguished Names, Getting Help, keytool Tool
@comment node-name, next, previous, up
@c man begin OPTIONS gkeytool
@subsection Common options

The following @option{OPTION}s are used in more than one @command{COMMAND}. They are described here to reduce redundancy.

@table @gcctabopt
@anchor{alias}
@item -alias @var{Alias}
Every entry, be it a @i{Key Entry} or a @i{Trusted Certificate}, in a key store is uniquely identified by a user-defined @var{Alias} string. Use this option to specify the @var{Alias} to use when referring to an entry in the key store. Unless specified otherwise, a default value of @code{mykey} shall be used when this option is omitted from the command line.

@anchor{keyalg}
@item -keyalg @var{ALGORITHM}
Use this option to specify the canonical name of the key-pair generation algorithm. The default value for this option is @code{DSS} (a synonym for the Digital Signature Algorithm also known as DSA).

@anchor{keysize}
@item -keysize @var{SIZE}
Use this option to specify the number of bits of the shared modulus (for both the public and private keys) to use when generating new keys. A default value of @code{1024} will be used if this option is omitted from the command line.

@anchor{validity}
@item -validity @var{DAY_COUNT}
Use this option to specify the number of days a newly generated certificate will be valid for. The default value is @code{90} (days) if this option is omitted from the command line.

@anchor{storetype}
@item -storetype @var{STORE_TYPE}
Use this option to specify the type of the key store to use. The default value, if this option is omitted, is that of the property @code{keystore.type} in the security properties file, which is obtained by invoking the static method call @code{getDefaultType()} in @code{java.security.KeyStore}.

@anchor{storepass}
@item -storepass @var{PASSWORD}
Use this option to specify the password protecting the key store. If this option is omitted from the command line, you will be prompted to provide a password.

@anchor{keystore}
@item -keystore @var{URL}
Use this option to specify the location of the key store to use. The default value is a file URL referencing the file named @file{.keystore} located in the path returned by the call to @code{java.lang.System#getProperty(String)} using @code{user.home} as argument.

If a URL was specified, but was found to be malformed --e.g.@: missing protocol element-- the tool will attempt to use the URL value as a file-name (with absolute or relative path-name) of a key store --as if the protocol was @code{file:}.

@anchor{provider}
@item -provider @var{PROVIDER_CLASS_NAME}
A fully qualified class name of a @i{Security Provider} to add to the current list of @i{Security Providers} already installed in the JVM in-use. If a provider class is specified with this option, and was successfully added to the runtime --i.e.@: it was not already installed-- then the tool will attempt to removed this @i{Security Provider} before exiting.

@anchor{file}
@item -file @var{FILE}
Use this option to designate a file to use with a command. When specified with this option, the value is expected to be the fully qualified path of a file accessible by the File System. Depending on the command, the file may be used as input or as output. When this option is omitted from the command line, @code{STDIN} will be used instead, as the source of input, and @code{STDOUT} will be used instead as the output destination.

@anchor{verbose}
@item -v
Unless specified otherwise, use this option to enable more verbose output.

@end table
@c man end

@comment ----------------------------------------------------------------------

@node Distinguished Names, Add/Update Commands, Common keytool Options, keytool Tool
@comment node-name, next, previous, up
@subsection X.500 Distinguished Names

@anchor{dn}
A @i{Distinguished Name} (or DN) MUST be supplied with some of the @code{COMMAND}s using a @code{-dname} option. The syntax of a valid value for this option MUST follow RFC-2253 specifications. Namely the following components (with their accepted meaning) will be recognized. Note that the component name is case-insensitive:

@ftable @var
@item CN
The Common Name; e.g.@: @kbd{host.domain.com}
@item OU
The Organizational Unit; e.g.@: @kbd{IT Department}
@item O
The Organization Name; e.g.@: @kbd{The Sample Company}
@item L
The Locality Name; e.g.@: @kbd{Sydney}
@item ST
The State Name; e.g.@: @kbd{New South Wales}
@item C
The 2-letter Country identifier; e.g.@: @kbd{AU}
@end ftable

When specified with a @code{-dname} option, each pair of component/value will be separated from the other with a comma. Each component and value pair MUST be separated by an equal sign. For example, the following is a valid DN value:@*

@format
CN=host.domain.com, O=The Sample Company, L=Sydney, ST=NSW, C=AU
@end format
@*
If the @i{Distinguished Name} is required, and no valid default value can be used, the tool will prompt you to enter the information through the console.

@comment ----------------------------------------------------------------------

@node Add/Update Commands, Export Commands, Distinguished Names, keytool Tool
@comment node-name, next, previous, up
@c man begin OPTIONS gkeytool
@subsection Add/Update commands
@c man end

@menu
* Command -genkey::            Generate private key and self-signed certificate
* Command -import::            Import certificates and certificate replies
* Command -selfcert::          Generate self-signed certificate
* Command -cacert::            Import a CA Trusted Certificate
* Command -identitydb::        Import JDK-1 style identities
@end menu

@comment ----------------------------------------------------------------------

@node Command -genkey, Command -import, Add/Update Commands, Add/Update Commands
@comment node-name, next, previous, up
@c man begin OPTIONS gkeytool
@subsubsection The @option{-genkey} command

Use this command to generate a new key-pair (both private and public keys), and save these credentials in the key store as a @i{Key Entry}, associated with the designated (if was specified with the @option{-alias} option) or default (if the @option{-alias} option is omitted) @i{Alias}.

The private key material will be protected with a user-defined password (see @option{-keypass} option). The public key on the other hand will be part of a self-signed X.509 certificate, which will form a 1-element chain and will be saved in the key store.

@table @gcctabopt
@item -alias @var{ALIAS}
For more details @pxref{alias,, ALIAS}.

@item -keyalg @var{ALGORITHM}
For more details @pxref{keyalg,, ALGORITHM}.

@item -keysize @var{KEY_SIZE}
For more details @pxref{keysize,, KEY_SIZE}.

@item -sigalg @var{ALGORITHM}
The canonical name of the digital signature algorithm to use for signing certificates. If this option is omitted, a default value will be chosen based on the type of the key-pair; i.e., the algorithm that ends up being used by the -keyalg option. If the key-pair generation algorithm is @code{DSA}, the value for the signature algorithm will be @code{SHA1withDSA}. If on the other hand the key-pair generation algorithm is @code{RSA}, then the tool will use @code{MD5withRSA} as the signature algorithm.

@item -dname @var{NAME}
This a mandatory value for the command. If no value is specified --i.e.@: the @option{-dname} option is omitted-- the tool will prompt you to enter a @i{Distinguished Name} to use as both the @i{Owner} and @i{Issuer} of the generated self-signed certificate.

For more details @pxref{dn,, X.500 DISTINGUISHED NAME}.

@item -keypass @var{PASSWORD}
Use this option to specify the password which the tool will use to protect the newly created @i{Key Entry}.

If this option is omitted, you will be prompted to provide a password.

@item -validity @var{DAY_COUNT}
For more details @pxref{validity,, DAY_COUNT}.

@item -storetype @var{STORE_TYPE}
For more details @pxref{storetype,, STORE_TYPE}.

@item -keystore @var{URL}
For more details @pxref{keystore,, URL}.

@item -storepass @var{PASSWORD}
For more details @pxref{storepass,, PASSWORD}.

@item -provider @var{PROVIDER_CLASS_NAME}
For more details @pxref{provider,, PROVIDER_CLASS_NAME}.

@item -v
For more details @pxref{verbose}.

@end table
@c man end

@comment ----------------------------------------------------------------------

@node Command -import, Command -selfcert, Command -genkey, Add/Update Commands
@comment node-name, next, previous, up
@c man begin OPTIONS gkeytool
@subsubsection The @option{-import} command

Use this command to read an X.509 certificate, or a PKCS#7 @i{Certificate Reply} from a designated input source and incorporate the certificates into the key store.

If the @i{Alias} does not already exist in the key store, the tool treats the certificate read from the input source as a new @i{Trusted Certificate}. It then attempts to discover a chain-of-trust, starting from that certificate and ending at another @i{Trusted Certificate}, already stored in the key store. If the @option{-trustcacerts} option is present, an additional key store, of type @code{JKS} named @file{cacerts}, and assumed to be present in @file{$@{JAVA_HOME@}/lib/security} will also be consulted if found --@code{$@{JAVA_HOME@}} refers to the location of an installed @i{Java Runtime Environment} (JRE). If no chain-of-trust can be established, and unless the @code{-noprompt} option has been specified, the certificate is printed to @code{STDOUT} and the user is prompted for a confirmation.

If @i{Alias} exists in the key store, the tool will treat the certificate(s) read from the input source as a @i{Certificate Reply}, which can be a chain of certificates, that eventually would replace the chain of certificates associated with the @i{Key Entry} of that @i{Alias}. The substitution of the certificates only occurs if a chain-of-trust can be established between the bottom certificate of the chain read from the input file and the @i{Trusted Certificates} already present in the key store. Again, if the @option{-trustcacerts} option is specified, additional @i{Trusted Certificates} in the same @file{cacerts} key store will be considered. If no chain-of-trust can be established, the operation will abort.

@table @gcctabopt
@item -alias @var{ALIAS}
For more details @pxref{alias,, ALIAS}.

@item -file @var{FILE}
For more details @pxref{file,, FILE}.

@item -keypass @var{PASSWORD}
Use this option to specify the password which the tool will use to protect the @i{Key Entry} associated with the designated @i{Alias}, when replacing this @i{Alias}' chain of certificates with that found in the certificate reply.

If this option is omitted, and the chain-of-trust for the certificate reply has been established, the tool will first attempt to unlock the @i{Key Entry} using the same password protecting the key store. If this fails, you will then be prompted to provide a password.

@item -noprompt
Use this option to prevent the tool from prompting the user.

@item -trustcacerts
Use this option to indicate to the tool that a key store, of type @code{JKS}, named @file{cacerts}, and usually located in @file{lib/security} in an installed @i{Java Runtime Environment} should be considered when trying to establish chain-of-trusts.

@item -storetype @var{STORE_TYPE}
For more details @pxref{storetype,, STORE_TYPE}.

@item -keystore @var{URL}
For more details @pxref{keystore,, URL}.

@item -storepass @var{PASSWORD}
For more details @pxref{storepass,, PASSWORD}.

@item -provider @var{PROVIDER_CLASS_NAME}
For more details @pxref{provider,, PROVIDER_CLASS_NAME}.

@item -v
For more details @pxref{verbose}.

@end table
@c man end

@comment ----------------------------------------------------------------------

@node Command -selfcert, Command -cacert, Command -import, Add/Update Commands
@comment node-name, next, previous, up
@c man begin OPTIONS gkeytool
@subsubsection The @option{-selfcert} command

Use this command to generate a self-signed X.509 version 1 certificate. The newly generated certificate will form a chain of one element which will replace the previous chain associated with the designated @i{Alias} (if @option{-alias} option was specified), or the default @i{Alias} (if @option{-alias} option was omitted).

@table @gcctabopt
@item -alias @var{ALIAS}
For more details @pxref{alias,, ALIAS}.

@item -sigalg @var{ALGORITHM}
The canonical name of the digital signature algorithm to use for signing the certificate. If this option is omitted, a default value will be chosen based on the type of the private key associated with the designated @i{Alias}. If the private key is a @code{DSA} one, the value for the signature algorithm will be @code{SHA1withDSA}. If on the other hand the private key is an @code{RSA} one, then the tool will use @code{MD5withRSA} as the signature algorithm.

@item -dname @var{NAME}
Use this option to specify the @i{Distinguished Name} of the newly generated self-signed certificate. If this option is omitted, the existing @i{Distinguished Name} of the base certificate in the chain associated with the designated @i{Alias} will be used instead.

For more details @pxref{dn,, X.500 DISTINGUISHED NAME}.

@item -validity @var{DAY_COUNT}
For more details @pxref{validity,, DAY_COUNT}.

@item -keypass @var{PASSWORD}
Use this option to specify the password which the tool will use to unlock the @i{Key Entry} associated with the designated @i{Alias}.

If this option is omitted, the tool will first attempt to unlock the @i{Key Entry} using the same password protecting the key store. If this fails, you will then be prompted to provide a password.

@item -storetype @var{STORE_TYPE}
For more details @pxref{storetype,, STORE_TYPE}.

@item -keystore @var{URL}
For more details @pxref{keystore,, URL}.

@item -storepass @var{PASSWORD}
For more details @pxref{storepass,, PASSWORD}.

@item -provider @var{PROVIDER_CLASS_NAME}
For more details @pxref{provider,, PROVIDER_CLASS_NAME}.

@item -v
For more details @pxref{verbose}.

@end table
@c man end

@comment ----------------------------------------------------------------------

@node Command -cacert, Command -identitydb, Command -selfcert, Add/Update Commands
@comment node-name, next, previous, up
@c man begin OPTIONS gkeytool
@subsubsection The @option{-cacert} command

Use this command to import, a CA certificate and add it to the key store as a @i{Trusted Certificate}. The @i{Alias} for this new entry will be constructed from the FILE's base-name after replacing hyphens and dots with underscores.

This command is useful when used in a script that recursively visits a directory of CA certificates to populate a @code{cacerts.gkr} @i{Key Store} of trusted certificates which can then be used commands that specify the @option{-trustcacerts} option.

@table @gcctabopt
@item -file @var{FILE}
For more details @pxref{file,, FILE}.

@item -storetype @var{STORE_TYPE}
For more details @pxref{storetype,, STORE_TYPE}.

@item -keystore @var{URL}
For more details @pxref{keystore,, URL}.

@item -storepass @var{PASSWORD}
For more details @pxref{storepass,, PASSWORD}.

@item -provider @var{PROVIDER_CLASS_NAME}
For more details @pxref{provider,, PROVIDER_CLASS_NAME}.

@item -v
For more details @pxref{verbose}.

@end table
@c man end

@comment ----------------------------------------------------------------------

@node Command -identitydb, , Command -cacert, Add/Update Commands
@comment node-name, next, previous, up
@c man begin OPTIONS gkeytool
@subsubsection The @option{-identitydb} command

@b{NOT IMPLEMENTED YET}.

Use this command to import a JDK 1.1 style Identity Database.

@table @gcctabopt
@item -file @var{FILE}
For more details @pxref{file,, FILE}.

@item -storetype @var{STORE_TYPE}
For more details @pxref{storetype,, STORE_TYPE}.

@item -keystore @var{URL}
For more details @pxref{keystore,, URL}.

@item -storepass @var{PASSWORD}
For more details @pxref{storepass,, PASSWORD}.

@item -provider @var{PROVIDER_CLASS_NAME}
For more details @pxref{provider,, PROVIDER_CLASS_NAME}.

@item -v
For more details @pxref{verbose}.

@end table
@c man end

@comment ----------------------------------------------------------------------

@node Export Commands, Display Commands, Add/Update Commands, keytool Tool
@comment node-name, next, previous, up
@c man begin OPTIONS gkeytool
@subsection Export commands
@c man end

@menu
* Command -certreq::           Generate Certificate Signing Requests (CSR)
* Command -export::            Export a certificate in a Key Store
@end menu

@comment ----------------------------------------------------------------------

@node Command -certreq, Command -export, Export Commands, Export Commands
@comment node-name, next, previous, up
@c man begin OPTIONS gkeytool
@subsubsection The @option{-certreq} command

Use this command to generate a PKCS#10 @i{Certificate Signing Request} (CSR) and write it to a designated output destination. The contents of the destination should look something like the following:

@example
-----BEGIN NEW CERTIFICATE REQUEST-----
MI...QAwXzEUMBIGA1UEAwwLcnNuQGdudS5vcmcxGzAZBgNVBAoMElUg
Q2...A0GA1UEBwwGU3lkbmV5MQwwCgYDVQQIDANOU1cxCzAJBgNVBACC
...
FC...IVwNVOfQLRX+O5kAhQ/a4RTZme2L8PnpvgRwrf7Eg8D6w==
-----END NEW CERTIFICATE REQUEST-----
@end example

@b{IMPORTANT}: Some documentation (e.g.@: RSA examples) claims that the @code{Attributes} field, in the CSR is @code{OPTIONAL} while RFC-2986 implies the opposite. This implementation considers this field, by default, as @code{OPTIONAL}, unless the option @option{-attributes} is specified on the command line.

@table @gcctabopt
@item -alias @var{ALIAS}
For more details @pxref{alias,, ALIAS}.

@item -sigalg @var{ALGORITHM}
The canonical name of the digital signature algorithm to use for signing the certificate. If this option is omitted, a default value will be chosen based on the type of the private key associated with the designated @i{Alias}. If the private key is a @code{DSA} one, the value for the signature algorithm will be @code{SHA1withDSA}. If on the other hand the private key is an @code{RSA} one, then the tool will use @code{MD5withRSA} as the signature algorithm.

@item -file @var{FILE}
For more details @pxref{file,, FILE}.

@item -keypass @var{PASSWORD}
Use this option to specify the password which the tool will use to unlock the @i{Key Entry} associated with the designated @i{Alias}.

If this option is omitted, the tool will first attempt to unlock the @i{Key Entry} using the same password protecting the key store. If this fails, you will then be prompted to provide a password.

@item -storetype @var{STORE_TYPE}
For more details @pxref{storetype,, STORE_TYPE}.

@item -keystore @var{URL}
For more details @pxref{keystore,, URL}.

@item -storepass @var{PASSWORD}
For more details @pxref{storepass,, PASSWORD}.

@item -provider @var{PROVIDER_CLASS_NAME}
For more details @pxref{provider,, PROVIDER_CLASS_NAME}.

@item -v
For more details @pxref{verbose}.

@item -attributes
Use this option to force the tool to encode a @code{NULL} DER value in the CSR as the value of the @code{Attributes} field.

@end table
@c man end

@comment ----------------------------------------------------------------------

@node Command -export, , Command -certreq, Export Commands
@comment node-name, next, previous, up
@c man begin OPTIONS gkeytool
@subsubsection The @option{-export} command

Use this command to export a certificate stored in a key store to a designated output destination, either in binary format (if the @option{-v} option is specified), or in RFC-1421 compliant encoding (if the @option{-rfc} option is specified instead).

@table @gcctabopt
@item -alias @var{ALIAS}
For more details @pxref{alias,, ALIAS}.

@item -file @var{FILE}
For more details @pxref{file,, FILE}.

@item -storetype @var{STORE_TYPE}
For more details @pxref{storetype,, STORE_TYPE}.

@item -keystore @var{URL}
For more details @pxref{keystore,, URL}.

@item -storepass @var{PASSWORD}
For more details @pxref{storepass,, PASSWORD}.

@item -provider @var{PROVIDER_CLASS_NAME}
For more details @pxref{provider,, PROVIDER_CLASS_NAME}.

@item -rfc
Use RFC-1421 specifications when encoding the output.

@item -v
Output the certificate in binary DER encoding. This is the default output format of the command if neither @option{-rfc} nor @code{-v} options were detected on the command line. If both this option and the @option{-rfc} option are detected on the command line, the tool will opt for the RFC-1421 style encoding.

@end table
@c man end

@comment ----------------------------------------------------------------------

@node Display Commands, Management Commands, Export Commands, keytool Tool
@comment node-name, next, previous, up
@c man begin OPTIONS gkeytool
@subsection Display commands
@c man end

@menu
* Command -list::              Display information about one or all Aliases
* Command -printcert::         Print a certificate or a certificate fingerprint
@end menu

@comment ----------------------------------------------------------------------

@node Command -list, Command -printcert, Display Commands, Display Commands
@comment node-name, next, previous, up
@c man begin OPTIONS gkeytool
@subsubsection The @option{-list} command

Use this command to print one or all of a key store entries to @code{STDOUT}. Usually this command will only print a @i{fingerprint} of the certificate, unless either the @option{-rfc} or the @option{-v} option is specified.

@table @gcctabopt
@item -alias @var{ALIAS}
If this option is omitted, the tool will print ALL the entries found in the key store.

For more details @pxref{alias,, ALIAS}.

@item -storetype @var{STORE_TYPE}
For more details @pxref{storetype,, STORE_TYPE}.

@item -keystore @var{URL}
For more details @pxref{keystore,, URL}.

@item -storepass @var{PASSWORD}
For more details @pxref{storepass,, PASSWORD}.

@item -provider @var{PROVIDER_CLASS_NAME}
For more details @pxref{provider,, PROVIDER_CLASS_NAME}.

@item -rfc
Use RFC-1421 specifications when encoding the output.

@item -v
Output the certificate in human-readable format. If both this option and the @option{-rfc} option are detected on the command line, the tool will opt for the human-readable form and will not abort the command.

@end table
@c man end

@comment ----------------------------------------------------------------------

@node Command -printcert, , Command -list, Display Commands
@comment node-name, next, previous, up
@c man begin OPTIONS gkeytool
@subsubsection The @option{-printcert} command

Use this command to read a certificate from a designated input source and print it to @code{STDOUT} in a human-readable form.

@table @gcctabopt
@item -file @var{FILE}
For more details @pxref{file,, FILE}.

@item -v
For more details @pxref{verbose}.

@end table
@c man end

@comment ----------------------------------------------------------------------

@node Management Commands, , Display Commands, keytool Tool
@comment node-name, next, previous, up
@c man begin OPTIONS gkeytool
@subsection Management commands
@c man end

@menu
* Command -keyclone::          Clone a Key Entry in a Key Store
* Command -storepasswd::       Change the password protecting a Key Store
* Command -keypasswd::         Change the password protecting a Key Entry
* Command -delete::            Remove an entry in a Key Store
@end menu

@comment ----------------------------------------------------------------------

@node Command -keyclone, Command -storepasswd, Management Commands, Management Commands
@comment node-name, next, previous, up
@c man begin OPTIONS gkeytool
@subsubsection The @option{-keyclone} command

Use this command to clone an existing @i{Key Entry} and store it under a new (different) @i{Alias} protecting, its private key material with possibly a new password.

@table @gcctabopt
@item -alias @var{ALIAS}
For more details @pxref{alias,, ALIAS}.

@item -dest @var{ALIAS}
Use this option to specify the new @i{Alias} which will be used to identify the cloned copy of the @i{Key Entry}.

@item -keypass @var{PASSWORD}
Use this option to specify the password which the tool will use to unlock the @i{Key Entry} associated with the designated @i{Alias}.

If this option is omitted, the tool will first attempt to unlock the @i{Key Entry} using the same password protecting the key store. If this fails, you will then be prompted to provide a password.

@item -new @var{PASSWORD}
Use this option to specify the password protecting the private key material of the newly cloned copy of the @i{Key Entry}.

@item -storetype @var{STORE_TYPE}
For more details @pxref{storetype,, STORE_TYPE}.

@item -keystore @var{URL}
For more details @pxref{keystore,, URL}.

@item -storepass @var{PASSWORD}
For more details @pxref{storepass,, PASSWORD}.

@item -provider @var{PROVIDER_CLASS_NAME}
For more details @pxref{provider,, PROVIDER_CLASS_NAME}.

@item -v
For more details @pxref{verbose}.

@end table
@c man end

@comment ----------------------------------------------------------------------

@node Command -storepasswd, Command -keypasswd, Command -keyclone, Management Commands
@comment node-name, next, previous, up
@c man begin OPTIONS gkeytool
@subsubsection The @option{-storepasswd} command

Use this command to change the password protecting a key store.

@table @gcctabopt
@item -new @var{PASSWORD}
The new, and different, password which will be used to protect the designated key store.

@item -storetype @var{STORE_TYPE}
For more details @pxref{storetype,, STORE_TYPE}.

@item -keystore @var{URL}
For more details @pxref{keystore,, URL}.

@item -storepass @var{PASSWORD}
For more details @pxref{storepass,, PASSWORD}.

@item -provider @var{PROVIDER_CLASS_NAME}
For more details @pxref{provider,, PROVIDER_CLASS_NAME}.

@item -v
For more details @pxref{verbose}.

@end table
@c man end

@comment ----------------------------------------------------------------------

@node Command -keypasswd, Command -delete, Command -storepasswd, Management Commands
@comment node-name, next, previous, up
@c man begin OPTIONS gkeytool
@subsubsection The @option{-keypasswd} command

Use this command to change the password protecting the private key material of a designated @i{Key Entry}.

@table @gcctabopt
@item -alias @var{ALIAS}
For more details @pxref{alias,, ALIAS}.

Use this option to specify the password which the tool will use to unlock the @i{Key Entry} associated with the designated @i{Alias}.

If this option is omitted, the tool will first attempt to unlock the @i{Key Entry} using the same password protecting the key store. If this fails, you will then be prompted to provide a password.

@item -new @var{PASSWORD}
The new, and different, password which will be used to protect the private key material of the designated @i{Key Entry}.

@item -storetype @var{STORE_TYPE}
For more details @pxref{storetype,, STORE_TYPE}.

@item -keystore @var{URL}
For more details @pxref{keystore,, URL}.

@item -storepass @var{PASSWORD}
For more details @pxref{storepass,, PASSWORD}.

@item -provider @var{PROVIDER_CLASS_NAME}
For more details @pxref{provider,, PROVIDER_CLASS_NAME}.

@item -v
For more details @pxref{verbose}.

@end table
@c man end

@comment ----------------------------------------------------------------------

@node Command -delete, , Command -keypasswd, Management Commands
@comment node-name, next, previous, up
@c man begin OPTIONS gkeytool
@subsubsection The @option{-delete} command

Use this command to delete a designated key store entry.

@table @gcctabopt
@item -alias @var{ALIAS}
For more details @pxref{alias,, ALIAS}.

@item -storetype @var{STORE_TYPE}
For more details @pxref{storetype,, STORE_TYPE}.

@item -keystore @var{URL}
For more details @pxref{keystore,, URL}.

@item -storepass @var{PASSWORD}
For more details @pxref{storepass,, PASSWORD}.

@item -provider @var{PROVIDER_CLASS_NAME}
For more details @pxref{provider,, PROVIDER_CLASS_NAME}.

@item -v
For more details @pxref{verbose}.

@end table
@c man end

@comment ----------------------------------------------------------------------

@node Other Tools, I18N Issues, Security Tools, Top
@comment node-name, next, previous, up
@chapter Other Tools

This is a list of currently undocumented classpath tools: @b{jar},
@b{javah}, @b{gcjh}, @b{native2ascii}, @b{orbd}, @b{serialver}, @b{rmid}, @b{rmiregistry}
and @b{tnameserv}.

@menu
* jar Tool::                   Archive tool for Java archives
* javah Tool::                 A java header compiler
* gcjh Tool::                  A java header compiler (old version)
* native2ascii Tool::          An encoding converter
* orbd Tool::                  An object request broker daemon
* serialver Tool::             A serial version command
* rmid Tool::                  RMI activation daemon
* rmiregistry Tool::           Remote object registry
* tnameserv Tool::             Naming service
* gjdoc Tool::                 A documentation generator
@end menu

@comment ----------------------------------------------------------------------

@node jar Tool, javah Tool, , Other Tools
@comment node-name, next, previous, up
@section The @command{jar} Tool
@c man title gjar - Archive tool for Java archives

@c man begin DESCRIPTION gjar

@command{gjar} is an implementation of Sun's jar utility that comes with
the JDK.

If any file is a directory then it is processed recursively.  The
manifest file name and the archive file name needs to be specified in
the same order the @option{-m} and @option{-f} flags are specified.

@c man end

@ignore
@c man begin SYNOPSIS gjar
gjar @option{-ctxui} [@var{OPTIONS}] @var{jar-file} [@option{-C} @var{DIR} @var{FILE}] @var{FILE}@dots{}
@c man end
@end ignore

@c man begin OPTIONS gjar

Operation mode:

@table @gcctabopt
@item -c
Create new archive.

@item -t
List table of contents for archive.

@item -x
Extract named (or all) files from archive.

@item -u
Update existing archive.

@item -i @var{FILE}
Compute archive index.
@end table

Operation modifiers:

@table @gcctabopt
@item -f @var{FILE}
Specify archive file name.

@item -0
Store only; use no ZIP compression.

@item -v
Generate verbose output on standard output.

@item -M
Do not create a manifest file for the entries.

@item -m @var{manifest}
Include manifest information from specified @var{manifest} file.
@end table

File name selection:

@table @gcctabopt
@item -C @var{DIR} @var{FILE}
Change to the @var{DIR} and include the following @var{FILE}.

@item -@@
Read the names of the files to add to the archive from stdin.  This
option is supported only in combination with @option{-c} or @option{-u}.
Non standard option added in the GCC version.
@end table

Standard options:

@table @gcctabopt
@item -help
Print help text, then exit.
@item -version
Print version number, then exit.
@item -J@var{OPTION}
Pass argument to the Java runtime.
@end table

@c man end

@c man begin SEEALSO gjar
java(1), @dots{}
@c man end

@comment ----------------------------------------------------------------------

@node javah Tool, gcjh Tool, jar Tool, Other Tools
@comment node-name, next, previous, up
@section The @command{javah} Tool
@c man title gjavah - generate header files from Java class files

@c man begin DESCRIPTION gjavah

The @command{gjavah} program is used to generate header files from class
files.  It can generate both CNI and JNI header files, as well as stub
implementation files which can be used as a basis for implementing the
required native methods.

@c man end

@ignore
@c man begin SYNOPSIS gjavah
gjavah @dots{}
@c man end
@end ignore

@c man begin OPTIONS gjavah

@table @gcctabopt
@item -d @var{DIR}
Set output directory.

@item -o @var{FILE}
Set output file (only one of @option{-d} or @option{-o} may be used).

@item -cmdfile @var{FILE}
Read command file.

@item -all @var{DIR}
Operate on all class files under directory @var{DIR}.

@item -stubs
Emit stub implementation.

@item -jni
Emit JNI stubs or header (default).

@item -cni
Emit CNI stubs or header (default JNI).

@item -verbose
Set verbose mode.

@item -force
Output files should always be written.
@end table

Class path options:
@table @gcctabopt
@item -classpath @var{PATH}
Set the class path.

@item -I@var{DIR}
Add directory to class path.

@item -bootclasspath @var{PATH}
Set the boot class path.

@item -extdirs @var{PATH}
Set the extension directory path.
@end table

Standard options:
@table @gcctabopt
@item -help
Print help text, then exit.
@item -version
Print version number, then exit.
@item -J@var{OPTION}
Pass argument to the Java runtime.
@end table
@c man end

@c man begin SEEALSO gjavah
javac(1), @dots{}
@c man end

@comment ----------------------------------------------------------------------

@node gcjh Tool, native2ascii Tool, javah Tool, Other Tools
@comment node-name, next, previous, up
@section The @command{gcjh} Tool
@c man title gcjh - generate header files from Java class files

@c man begin DESCRIPTION gcjh

The @code{gcjh} program is used to generate header files from class
files.  It can generate both CNI and JNI header files, as well as stub
implementation files which can be used as a basis for implementing the
required native methods.  It is similar to @code{javah} but has
slightly different command line options, and defaults to CNI.

@c man end

@ignore
@c man begin SYNOPSIS gcjh
gcjh [@var{OPTIONS}]@dots{} @var{CLASS}@dots{}
@c man end
@end ignore

@c man begin OPTIONS gcjh

See @code{javah} for a full description; this page only lists the
additional options provided by @code{gcjh}.

CNI text options
@table @gcctabopt
@item -add @var{text}
Insert @var{text} into class body.
@item -append @var{text}
Append @var{text} after class declaration.
@item -friend @var{text}
Insert @var{text} as a @code{friend} declaration.
@item -prepend @var{text}
Insert @var{text} before start of class.
@end table

Compatibility options (unused)
@table @gcctabopt
@item -td @var{DIR}
@itemx -M
@itemx -MM
@itemx -MD
@itemx -MMD
Unused compatibility option.
@end table


Standard options:
@table @gcctabopt
@item -help
Print help text, then exit.
@item -version
Print version number, then exit.
@item -J@var{OPTION}
Pass argument to the Java runtime.
@end table
@c man end

@c man begin SEEALSO gcjh
javac(1), javah(1), @dots{}
@c man end

@comment ----------------------------------------------------------------------

@node native2ascii Tool, orbd Tool, gcjh Tool, Other Tools
@comment node-name, next, previous, up
@section The @command{native2ascii} Tool
@c man title gnative2ascii - An encoding converter

@c man begin DESCRIPTION gnative2ascii

To be written @dots{}

@c man end

@ignore
@c man begin SYNOPSIS gnative2ascii
gnative2ascii [@var{OPTIONS}]@dots{} [@var{INPUTFILE} [@var{OUTPUTFILE}]]
@c man end
@end ignore

@c man begin OPTIONS gnative2ascii

@table @gcctabopt
@item -encoding @var{NAME}
Set the encoding to use.

@item -reversed
Convert from encoding to native.
@end table

Standard options:
@table @gcctabopt
@item -help
Print help text, then exit.
@item -version
Print version number, then exit.
@item -J@var{OPTION}
Pass argument to the Java runtime.
@end table

@c man end

@c man begin SEEALSO gnative2ascii
javac(1), @dots{}
@c man end

@comment ----------------------------------------------------------------------

@node orbd Tool, serialver Tool, native2ascii Tool, Other Tools
@comment node-name, next, previous, up
@section The @command{orbd} object request broker daemon
@c man title gorbd - An object request broker daemon

@c man begin DESCRIPTION gorbd

To be written @dots{}

@c man end

@ignore
@c man begin SYNOPSIS gorbd
gorbd @dots{}
@c man end
@end ignore

@c man begin OPTIONS gorbd

@table @gcctabopt
@item -ORBInitialPort @var{PORT}
Port on which persistent naming service is to be started.

@item -ior @var{FILE}
File in which to store persistent naming service's IOR reference

@item -directory @var{DIR}
Directory in which to store persistent data.

@item -restart
Restart persistent naming service, clearing persistent naming
database.
@end table

Standard options:
@table @gcctabopt
@item -help
Print help text, then exit.
@item -version
Print version number, then exit.
@item -J@var{OPTION}
Pass argument to the Java runtime.
@end table

@c man end

@c man begin SEEALSO gorbd
java(1), @dots{}
@c man end

@comment ----------------------------------------------------------------------

@node serialver Tool, rmid Tool, orbd Tool, Other Tools
@comment node-name, next, previous, up
@section The @command{serialver} version command
@c man title gserialver version command

@c man begin DESCRIPTION gserialver

Print the serialVersionUID of the specified classes.

@c man end

@ignore
@c man begin SYNOPSIS gserialver
gserialver [@var{OPTIONS}]@dots{} @var{CLASS}@dots{}
@c man end
@end ignore

@c man begin OPTIONS gserialver

@table @gcctabopt
@item -classpath @var{PATH}
Class path to use to find classes.
@end table

Standard options:
@table @gcctabopt
@item -help
Print help text, then exit.
@item -version
Print version number, then exit.
@item -J@var{OPTION}
Pass argument to the Java runtime.
@end table

@c man end

@c man begin SEEALSO gserialver
javac(1), @dots{}
@c man end

@comment ----------------------------------------------------------------------

@node rmid Tool, rmiregistry Tool, serialver Tool, Other Tools
@comment node-name, next, previous, up
@section The @command{rmid} RMI activation system daemon
@c man title grmid - RMI activation system daemon

@c man begin DESCRIPTION grmid

@command{rmiregistry} starts a remote object registry on the current
host.  If no port number is specified, then port 1099 is used.

@c man end

@ignore
@c man begin SYNOPSIS grmid
grmid [@var{OPTIONS}]@dots{}
@c man end
@end ignore

@c man begin OPTIONS grmid

Activation process control:
@table @gcctabopt
@item -port @var{PORT}
Port on which activation system is to be started.

@item -restart
Restart activation system, clearing persistent naming database, if
any.

@item -stop
Stop activation system.
@end table

Persistence:
@table @gcctabopt
@item -persistent
Make activation system persistent.

@item -directory @var{DIR}
Directory in which to store persistent data.
@end table

Debugging:
@table @gcctabopt
@item -verbose
Log binding events to standard out.
@end table

Standard options:
@table @gcctabopt
@item -help
Print help text, then exit.
@item -version
Print version number, then exit.
@item -J@var{OPTION}
Pass argument to the Java runtime.
@end table

@c man end

@c man begin SEEALSO grmid
java(1), @dots{}
@c man end

@comment ----------------------------------------------------------------------

@node rmiregistry Tool, tnameserv Tool, rmid Tool, Other Tools
@comment node-name, next, previous, up
@section The @command{rmiregistry} Tool
@c man title grmiregistry - Remote object registry

@c man begin DESCRIPTION grmiregistry

@command{grmiregistry} starts a remote object registry on the current
host.  If no port number is specified, then port 1099 is used.

@c man end

@ignore
@c man begin SYNOPSIS grmiregistry
grmiregistry [@var{OPTIONS}]@dots{} @var{PORT}
@c man end
@end ignore

@c man begin OPTIONS grmiregistry

Registry process control:
@table @gcctabopt
@item -restart
Restart RMI naming service, clearing persistent naming database, if
any.

@item -stop
Stop RMI naming service.
@end table

Persistence:
@table @gcctabopt
@item -persistent
Make RMI naming service persistent.

@item -directory @var{DIR}
Directory in which to store persistent data.
@end table

Debugging:
@table @gcctabopt
@item -verbose
Log binding events to standard out.
@end table

Standard options:
@table @gcctabopt
@item -help
Print help text, then exit.
@item -version
Print version number, then exit.
@item -J@var{OPTION}
Pass argument to the Java runtime.
@end table

@c man end

@c man begin SEEALSO grmiregistry
java(1), @dots{}
@c man end

@comment ----------------------------------------------------------------------

@node tnameserv Tool, gjdoc Tool, rmiregistry Tool, Other Tools
@comment node-name, next, previous, up
@section The @command{tnameserv} Tool
@c man title gtnameserv Naming service

@c man begin DESCRIPTION gtnameserv

To be written @dots{}

@c man end

@ignore
@c man begin SYNOPSIS gtnameserv
tnameserv [@var{OPTIONS}]
@c man end
@end ignore

@c man begin OPTIONS gtnameserv

@table @gcctabopt
@item -ORBInitialPort @var{PORT}
Port on which naming service is to be started.

@item -ior @var{FILE}
File in which to store naming service's IOR reference.
@end table

Standard options:
@table @gcctabopt
@item -help
Print help text, then exit.
@item -version
Print version number, then exit.
@item -J@var{OPTION}
Pass argument to the Java runtime.
@end table

@c man end

@c man begin SEEALSO gtnameserv
java(1), @dots{}
@c man end

@comment ----------------------------------------------------------------------

@ignore
@c man begin SYNOPSIS gjdoc
gjdoc [@option{-sourcepath }@var{pathlist}]
      [@option{-all}] [@option{-subpackages }@var{pkg:pkg:@dots{}}] [@option{-exclude }@var{pkglist}]
      [@option{-encoding }@var{charset}] [@option{-locale }@var{name}] [@option{-source }@var{release}]
      [@option{-public}] [@option{-protected}] [@option{-package}] [@option{-private}] 
      [@option{-doctitle }@var{text}] [@option{-header }@var{text}] [@option{-footer }@var{text}] [@option{-bottom }@var{text}]
      [@option{-link }@var{url}] [@option{-linkoffline }@var{url} @var{path}] [@option{-noqualifier }@var{pkg:pkg:@dots{}}] 
      [@option{-tagletpath }@var{pathlist}] [@option{-taglet }@var{className}] [@option{-tag }@var{tagspec}]
      [@option{-use}] [@option{-linksource}] [@option{-splitindex}] [@option{-noindex}] [@option{-notree}] 
      [@option{-version}] [@option{-author}] [@option{-nosince}] [@option{-addstylesheet }@var{file}]
      [@option{-d }@var{targetdir}] 
      [@var{packages}@dots{}] [@var{sourcefiles}@dots{}] [@@@var{cmdfile}]

gjdoc [@option{-sourcepath }@var{pathlist}]
      [@option{-all}] [@option{-subpackages }@var{pkg:pkg:@dots{}}] [@option{-exclude }@var{pkglist}]
      [@option{-encoding }@var{charset}] [@option{-locale }@var{name}] [@option{-source }@var{release}]
      [@option{-public}] [@option{-protected}] [@option{-package}] [@option{-private}] 
      [@option{-docletpath }@var{pathlist}] [@option{-doclet }@var{className}]
      [@var{packages}@dots{}] [@var{sourcefiles}@dots{}] [@@@var{cmdfile}]
      [doclet options]

gjdoc @option{--help}

gjdoc @option{--version}

Only the most useful options are listed here; see below for the
remainder.
@c man end
@end ignore
@c man begin SEEALSO gjdoc
Info entry for @file{gjdoc}.
@c man end
@c man begin BUGS gjdoc
Please report bugs to @w{@uref{http://savannah.gnu.org/bugs/?group=classpath}}.
@c man end
@c man begin AUTHOR gjdoc
Julian Scheid
@c man end

@node gjdoc Tool, , tnameserv Tool, Other Tools
@chapter Generating HTML Documentation
@cindex Gjdoc command options
@cindex command options
@cindex options, Gjdoc command

@c man begin DESCRIPTION gjdoc
Gjdoc can be used in two ways: as a stand-alone documentation tool, or
as a driver for a user-specified Doclet. @xref{Other Doclets}.

In the default mode, Gjdoc will use the Standard Doclet
@samp{HtmlDoclet} to generate a set of HTML pages.  The canonical
usage is:

@smallexample
gjdoc -s src/java/ -all -d api-docs/
@end smallexample

Here, @samp{src/java/} is the root of your source code class
hierarchy, @option{-all} means that all valid Java files found under
this root directory should be processed, and @samp{api-docs/} is the
directory where the generated documentation should be placed.

To learn more about running Doclets other than the Standard Doclet,
refer to the manual.  @xref{Invoking a Custom Doclet}.

@menu
* Invoking the Standard Doclet::   How to generate HTML documentation.
* Invoking a Custom Doclet::       How to run third-party and other 
                                   built-in Doclets.

* Option Summary by Type::         Brief list of all options, grouped by type.
* Gjdoc Option Summary::           List of all options accepted by Gjdoc.

* Source Set Options::      Select the set of source codes to run Gjdoc on.
* Source Format Options::   Specify the format of the source codes to document.

* Interlinking Options::    Connection your documentation with other projects.
* Output Control Options::  Specify the target directory and locale, and more.
* Generation Options::       Select which pieces of information to generate.
* Decoration Options::      Add or modify some titles, headers and footers or
                              override/amend static resources like stylesheets.
* Taglet Options::          Define your own javadoc @@tags

* Virtual Machine Options::
* Verbosity Options::
* Doclet Options::

* Other Doclets::                  Generating Other Output Types
* Gjdoc Concepts::                 Advanced Concepts

@end menu

@c man end

@comment ----------------------------------------------------------------------

@node Invoking the Standard Doclet, Invoking a Custom Doclet, , gjdoc Tool
@section Invoking the Standard Doclet
@cindex Gjdoc command options
@cindex command options
@cindex options, Gjdoc command

Running the Gjdoc Standard Doclet @samp{HtmlDoclet} is the default
mode of operation for Gjdoc.  This section lists the command line
options you can specify in this mode.  It doesn't distinguish between
general Gjdoc options and options specific to the Standard Doclet.

If you want to learn which options are accepted when Gjdoc is used as
a doclet driver, @xref{Invoking a Custom Doclet}.

@menu
* Source Set Options::      Select the set of source codes to run Gjdoc on.
* Source Format Options::   Specify the format of the source codes to document.

* Output Control Options::  Specify the target directory and locale, and more.
* Generation Options::       Select which pieces of information to generate.
* Decoration Options::      Add or modify some titles, headers and footers or
                              override/amend static resources like stylesheets.
* Taglet Options::          Define your own javadoc @@tags

* Virtual Machine Options::
* Doclet Options::

@end menu

@c man begin OPTIONS gjdoc

@node Option Summary by Type, Gjdoc Option Summary, Invoking a Custom Doclet, gjdoc Tool
@section Option Summary by Type

Here is a summary of all the options of both Gjdoc and the Standard
Doclet, grouped by type.  Explanations are in the following sections.

@table @emph
@item Source Set Options
@xref{Source Set Options,,Options For Specifying the Source Files To Operate on}.
@gccoptlist{-sourcepath @var{pathlist}  -subpackages @var{pkglist}  -exclude @var{pkglist}}

@item Source Format Options
@xref{Source Format Options,,Options For Specifying the Source Format}.
@gccoptlist{-source @var{release}  -encoding @var{encoding}  -breakiterator}

@item Interlinking Options
@xref{Interlinking Options,,Options For Specifying the Source Files To Operate on}.
@gccoptlist{-link @var{url}  -linkoffline @var{url} @var{file}  -noqualifier @var{pkg:pkg:...}}

@item Generation Options
@xref{Generation Options,,Options Controlling What is Included in the Output}.
@gccoptlist{-author  -licensetext  -use  -version  -splitindex  -noindex
 -nodeprecated  -nodeprecatedlist  -nohelp  -nonavbar
 -nosince  -notree  -public  -protected  -package  -private
 -docfilessubdirs  -excludedocfilessubdir @var{dirname}
 -linksource}

@item Output Options
@xref{Generation Options,,Options Controlling the Output}.
@gccoptlist{-d  -locale @var{name}  -charset @var{charset}  -docencoding @var{charset}
 -validhtml  -baseurl @var{url}}

@item Decoration Options
@gccoptlist{-windowtitle @var{text}  -doctitle @var{text}  -title @var{text}  
 -header @var{text}  -footer @var{text}  -bottom @var{text}
 -helpfile @var{file}  -stylesheetfile @var{file}  -addstylesheet @var{file}
 -group @var{groupheading} @var{pkgpattern:pkgpattern:@dots{}}}

@item Taglet Options
@xref{Taglet Options,,Options For Specifying user-defined Taglets}.
@gccoptlist{-tagletpath  -taglet @var{classname}  -tag @var{tagspec}}

@item Doclet Options
@xref{Doclet Options,,Options For Specifying the Doclet to use}.
@gccoptlist{-docletpath  -doclet @var{classname}}

@item Verbosity Options
@xref{Verbosity Options,,Options Controlling Gjdoc Behavior}.
@gccoptlist{-quiet  -verbose}

@item Virtual Machine Options
@xref{Virtual Machine Options,,Options Controlling Gjdoc Behavior}.
@gccoptlist{-classpath  -bootclasspath  -J @var{vmopt}}

@end table

@menu
* Virtual Machine Options::     Controlling the kind of output:
                        an executable, object files, assembler files,
                        or preprocessed source.
@end menu

@node Source Set Options, Source Format Options, Gjdoc Option Summary, gjdoc Tool
@section Selecting which Source Files to Process

@table @gcctabopt
@item -s @var{pathlist}
@item -sourcepath @var{pathlist}
Look for source files in the specified directory or directories.

@var{pathlist} should be one or more directory paths separated by your
platform's path separator (usually @samp{:} or @samp{;}).

If this option is not given, @command{gjdoc} will look for source
files in the current directory.

The directories specified should be root directories in terms of the
Java package system.  For example, if you want to generate
documentation for classes in package @samp{foo.bar}, you must specify
the directory containing the top-level @samp{@file{foo}}
sub-directory, not the directory @samp{@file{foo/bar/}} in which the
Java source files reside.

The short-hand alias @option{-s} is specific to @command{gjdoc} and
not compatible to Sun @command{javadoc}.

@item -all
@emph{[EXPERIMENTAL]}
Process all valid Java source files found in the directories listed in
the source path and their sub-directories.

This is an option specific to @command{gjdoc} and not compatible to
Sun @command{javadoc}.

@item -subpackages @var{pkg:pkg:@dots{}}
Process the classes in the given Java packages and all sub-packages,
recursively.  Note that multiple package names must be separated with
colons instead of whitespace.

@item -exclude @var{pkg:pkg:@dots{}}
Do not process classes in the given Java packages and all
sub-packages, recursively.  This option can be used in conjunction
with @option{-all} or @option{-subpackages} in order to exclude
individual packages or package sub-trees from the output.

@item @var{packages}@dots{}
Process all classes in the given Java packages.

@item @var{sourcefiles}@dots{}
Process the classes in the given Java source files.
@end table

@node Source Format Options, Interlinking Options, Source Set Options, gjdoc Tool
@section Specifying the Format of Input Files

@table @gcctabopt
@item -source @var{release}
Assume that the source files are targeted at the given release of the
Java platform.

@var{release} should be the version number of a Java platform release
in the format MAJOR.MINOR, for example @samp{1.4}.

This option is currently ignored except that an error is raised if a
release number other than @samp{1.2}, @samp{1.3} or @samp{1.4} is
specified.

@item -encoding @var{charset}
Assume that the source files are encoded using @var{charset}.

Examples for @var{charset} are @samp{US-ASCII}, @samp{ISO-8859-1} or
@samp{UTF-8}.

The semantics of @var{charset} are identical to those of @samp{java.nio.charset.Charset.forName(String)}.

@item -breakiterator
Use the locale's java.text.BreakIterator instead of the internal
first sentence detector.

By default, @command{gjdoc} uses an internal algorithm to determine
where a sentence ends. When this option is given, it will instead use
the @samp{java.text.BreakIterator} instance for the locale given with
@option{-locale} (or the default locale).

This option should be specified when applying @command{gjdoc} to
source code commented in a non-latin language for which the default
first sentence detector does not work. For all other cases, the
default (do not use BreakIterator) produces better results at the time
of this writing.
@end table

@node Interlinking Options, Output Control Options, Source Format Options, gjdoc Tool
@section Interlinking with other Documentation Sets

@table @gcctabopt
@item -link @var{url}

Create hyperlinks to another documentation set.

By default, @command{gjdoc} will only create hyperlinks to classes in
the source set.  Use this option to additionally create hyperlinks to
classes covered by the specified documentation set.

@var{url} should be the root URL of the other documentation set. For
example, to add hyperlinks to GNU Classpath, specify the following:

@smallexample
-link http://developer.classpath.org/doc/
@end smallexample

The @option{-link} option can be specified multiple times.

Note that specifying the @option{-link} option will cause an HTTP
access every time gjdoc is invoked. You can use @option{-linkoffline}
instead to avoid this access.

@item -linkoffline @var{url} @var{file}

Create hyperlinks to another documentation set which is also present
on the local file system.

This option works exactly like @option{-link}, except that it accesses
the local file system instead of the network for determining which
classes are covered by the linked documentation set.

When using @option{-linkoffline} the remote documentation set is not
accessed at all, which can significantly speed up generation time
depending on your network connection.  The generated hyperlinks to the
documentation set however refer to the remote set, not to the local
one, so that you can distribute the documentation without any further
dependencies.

The @option{-linkoffline} option can be specified multiple times.

@item -noqualifier @var{pkg:pkg:@dots{}}

Do not qualify names of classes in the given packages with their
package name.

By default, a class name is displayed unqualified only if the class is
part of the source set or a linked documentation set, and qualified
with the name of its containing package if it is not. You can use this
option to force unqualified names for classes even if they are not
part of the documentation set.

For example, usually a reference to the String class is represented
fully-qualified as @samp{java.lang.String} (unless you link to the
appropriate documentation set using @option{-link}) because it isn't
part of the documentation set.  You can specify @samp{-noqualifier
java.lang} to render the same references just as @samp{String}.

Note that for all unqualified class names, a tooltip is provided when
you place your mouse pointer over it in the HTML documentation.

@item -noqualifier @samp{all}
Omit package name qualifier from all class names.

Specify this option to omit package name qualifiers altogether,

@end table

@node Generation Options, Decoration Options, Output Control Options, gjdoc Tool
@section Selecting which Information to Generate

@table @gcctabopt
@item -public
Only include public members of public classes in the output.  By
default, protected class members are included as well.

@item -protected

Include public or protected members of public classes in the output.
This is the default.

@item -package

Include public, protected and package-private members of public and
package-private classes.

@item -private

Include all classes and class members regardless of their access
level.

@item -splitindex
Generate one index page per letter instead of a single, monolithic
index page.

By default, the index created by the Standard Doclet contains all
entries on a single page.  This is fine for small documentation sets,
but for large sets you should specify this option.

@item -nosince
Ignore @samp{@@since} tags in javadoc comments.

By default, the generated output contains sections listing the version
of your API since which the package, class or class member in question
exists when this tag is encountered.  Specify this option to omit this
information.

@item -notree
Do not generate any tree pages.

By default, the generated output includes one inheritance tree per
package, and - if the documentation set consists of multiple packages
- a page with the full inheritance tree.  Specify this option to omit
generation of these pages.

@item -noindex
Do not output the alphabetical index.

By default, gjdoc generates an alphabetical index of all program
elements in the documentation set (packages, classes, inner classes,
constructors, methods, and fields).  Specify this option to omit this
information.

@item -nohelp
Do not generate the help page.

This option is currently ignored as the Standard Doclet doesn't
provide a help page.

@item -nodeprecated
Do not output inline information about deprecated packages, classes or
class members.

By default, the Standard Doclet adds a highlighted paragraph with
deprecation information to the description of each deprecated program
element.  Specify this option to omit this information.

@item -nodeprecatedlist
Do not output the summary page for deprecated API elements.

By default, the Standard Doclet generates a page listing all
deprecated API elements along with a deprecation description which
usually includes the reason for deprecation and possible
alternatives.  Specify this option to omit this information.

@item -nonavbar
Do not output the navigation bar, header, and footer.

By default, each output page is equipped with a top navigation bar
(which may include a user-specified header) and a bottom navigation
bar (which may include a user-specified footer).  Specify this option
to omit this decoration.

@item -nocomment

Omit all documentation text from the generated files and output only
declarations and program element relationships.

This option is here for compatibility with @command{javadoc}.  If you
plan on extracting information about your project via @command{gjdoc},
you should consider using a different Doclet for your purposes
instead, for example XmlDoclet.  You could also use the Doclet API
directly by implementing a new Doclet.

@item -linksource

Generate a page with syntax-highlighted source code for each class.
By default, this page is not generated.

The source code can be accessed by clicking on the button labelled
"Source" in the navigation bar, or by clicking on the name of a
constructor, field, method, or inner class in the detail section of a
class documentation page.

@item -use

Generate a page with cross-reference information. By default, this
page is not generated.

The cross-reference information can be accessed by clicking on the
button labelled `Use' in the navigation bar.

The `Use' page lists all classes/interfaces in the documentation set
that extend/implement the class (type) in question; fields of the
type; methods or constructors accepting a parameter of the type;
methods returning the type; and methods or constructors throwing the
type.

@item -author
Include author information in the output.

When specified, author information as specified using the
@samp{@@author} tag in javadoc comments is incorporated into the
output. By default, @samp{@@author} tags are ignored.

@item -version
Include version information in the output.

When specified, version information as specified using the
@samp{@@version} tag in javadoc comments is incorporated into the
output. By default, @samp{@@version} tags are ignored.

@item -licensetext

Assume that the first comment in each source file contains the license
text, and add license information to the footer of each generated
class page.

This is an option specific to @command{gjdoc} and not compatible to
Sun @command{javadoc}.

This option is intended for use with free and open source projects
where source code is typically prefixed with a boilerplate license
comment, when there are legal reasons for including the license in the
documentation.

@item -docfilessubdirs

Recursively copy all files in the @file{doc-files} sub-directory of each
package directory.

Usually, only the files in the @file{doc-files} sub-directory are copied
without descending recursively.

@xref{Adding Custom Resources}.

@item -excludedocfilessubdir @var{name}:@var{name}:@dots{}

Do not copy some directories directly under the @file{doc-files}
sub-directories when descending recursively.

The argument to this option should be a colon-separated list of
directory names.

This option only makes sense if @option{-docfilessubdirs} is also
specified.  In this case, any sub-directory located directly beneath a
@file{doc-files} directory is omitted if listed.

@end table

@node Taglet Options, Virtual Machine Options, Decoration Options, gjdoc Tool
@section Custom Documentation Tags

@table @gcctabopt
@item -tagletpath @var{pathlist}
Search @var{pathlist} when loading subsequent Taglet classes specified
using @option{-taglet}.

@var{pathlist} should be one or more paths to a directory or jar file,
separated by your platform's path separator (usually @samp{:} or
@samp{;}).

@item -taglet @var{classname}
Register a Taglet.

@var{classname} should be the fully-qualified name of a Java class
implementing @samp{com.sun.tools.doclets.Taglet}.

The Taglet classes will be loaded from the classpath specified using
@option{-tagletpath}, from the classpath specified using
@option{-classpath} and from the default classpath.

See the documentation of @samp{com.sun.tools.doclets.Taglet} for
further information.

Note that for simple tags, there is also @option{-tag}.

@item -tag @var{tagspec}
Register a generic Taglet.

The format of @var{tagspec} must be @samp{<tagname>:<flags>:"<taghead>"}.

@var{tagname} is the tag name to match, without the leading @@ sign. 

@var{flags} is one or more of the following characters, where each
character specifies a source code context in which the tag is to be
recognized.

@table @gcctabopt
@item a  
all contexts
@item c  
constructors
@item f  
fields
@item m  
methods
@item o  
overview
@item p  
packages
@item t  
types (classes, interfaces, exceptions, errors)
@item X  
special character which temporarily disables the
Taglet altogether.
@end table

@var{taghead} is the string to display in the header of the section
devoted to the tag in question.

For example, to define a tag matching @samp{@@cvsid} which is to be
accepted in overview, package and type pages and which is labelled
with the header @samp{CVS ID}, you would specify:

@smallexample
-tag cvsid:tpo:"CVS ID"
@end smallexample

Let's say that a class javadoc comment contains

@smallexample
@@cvsid $Id: cp-tools.texinfo,v 1.9 2012-03-07 15:27:27 gnu_andrew Exp $
@end smallexample

Then the HTML output will contain something like

@smallexample
CVS ID:
  $Id: cp-tools.texinfo,v 1.9 2012-03-07 15:27:27 gnu_andrew Exp $
@end smallexample
@end table

@node Doclet Options, Other Doclets, Verbosity Options, gjdoc Tool
@section Running Other Doclets

@table @gcctabopt

@item -docletpath @var{pathlist}
Search @var{pathlist} when loading classes for the Doclet specified
using @option{-doclet}.

@var{pathlist} should be one or more paths to a directory or jar file,
separated by your platform's path separator (usually @samp{:} or
@samp{;}).

@item -doclet @var{className}
Run the specified doclet instead of the standard HtmlDoclet.

@var{className} should be the fully-qualified name of a class which
has a public default constructor and contain a method with the
following signature:

@smallexample
   import com.sun.javadoc.RootDoc;
   public static boolean start(RootDoc rootDoc) 
@end smallexample

The Doclet classes will be loaded from the classpath specified using
@option{-docletpath}, from the classpath specified using
@option{-classpath} and from the default classpath.

The @samp{start} method should process the information exposed by the
Doclet API via @samp{rootDoc} and return @samp{true} on success,
@samp{false} on failure.

If you are using a third-party doclet, refer to its documentation for
further instructions.  Note that support for third-party doclets is
experimental.  Please report any problems you encounter, or provide
feedback when successfully running third-party applets.

This option can be specified multiple times, in which case all doclets
are executed with the same information tree exposed via the Doclet API
for each Doclet run.

@end table

@node Decoration Options, Taglet Options, Generation Options, gjdoc Tool
@section Adding Information to the Output

@table @gcctabopt
@item -windowtitle @var{text}
Use @var{text} as the browser window title prefix.

When specified, the browser window title for each page will be
prefixed with @var{text} instead of the default string @samp{Generated
API Documentation}.

@var{text} should be plain text (it should not contain HTML tags).

@item -doctitle @var{text}
Set the header text of the overview page to @var{text}.

@var{text} should be a short plain text string.

When generating documentation for a single package, specifying this
option forces generation of the overview page.

@item -header @var{htmltext}

Add @var{htmltext} to the right upper corner of every generated page.
@var{htmltext} is usually set to the name of the project being
documented.

@item -footer @var{htmltext}

Add @var{htmltext} to the right bottom corner of every generated page.
@var{htmltext} is often set to the same value as for @option{-header}.

@item -bottom @var{htmltext}

Add @var{htmltext} to the very bottom of every generated page,
spanning the whole width of the page.  When specified, @var{htmltext}
usually consists of a copyright notice and/or links to other project
pages.

@item -addstylesheet @var{file}

Augment the default CSS style sheets with the user-specified
stylesheet @var{file}.

The given stylesheet is simply loaded by each HTML page in addition to
the default ones, as the last stylesheet.

Note that the CSS cascading rules apply.  That is, your style
properties will only be assigned if they have a higher cascading order
than @command{gjdoc}'s default style.  One simple way to make sure
that this is the case is to declare your overrides @samp{!important}.

See @w{@uref{http://www.w3.org/TR/REC-CSS2/cascade.html#cascading-order}}.

@item -group @var{heading} @var{pkgwildcard}:@var{pkgwildcard}:@dots{}

Arrange the given packages in a separate group on the overview page.

The first argument should be a short plain text which is used as the
title of the package group.  The second argument should be a
colon-separated list of package wildcards.  The group will consist of
all packages in the documentation set whose name matches any of the
given wildcards.

There is only one wildcard character, @samp{*}, which matches both
letters in package name components and the @samp{.} separating package
name components.  For example, @samp{j*regex} would match package
@samp{java.util.regex}.  A more useful example would be
@samp{javax.swing*} to match @samp{javax.swing} and all of its
sub-packages.

This option can be given multiple times.  

FIXME: Information about group nesting here.

@smallexample
gjdoc -group "Core Classes" 'java*' \
      -group "Swing" 'javax.swing*' \
      -group "XML APIs" 'javax.xml*' \
      -group "Other Extensions" javax* \
      @dots{}
@end smallexample

@item -overview @var{file}

Add the XHTML body fragment from @var{file} to the overview page.

@var{file} should contain an XHTML fragment with the HTML @samp{body}
tag as the root node.  @xref{XHTML Fragments}.

This option can be used to supply a description of the documentation
set as a whole.

When specified, the first sentence of the fragment will be put above
the tables listing the documented packages, along with a link to the
full copy of the fragment which is put below the tables.
@xref{First Sentence Detector}.

When generating documentation for a single package, specifying this
option forces generation of the overview page.

@item -stylesheetfile @var{file}

Use the CSS stylesheet in @var{file} instead of the default CSS
stylesheets.

If you only want to override parts of the default stylesheets, use
@option{-addstylesheet} instead.

@item -title @var{text}

@emph{Deprecated.} Use @option{-doctitle} @var{text} instead.

@item -helpfile @var{file}

This option is currently ignored.

When implemented, it will use the XHTML fragment in @var{file} for the
help page contents instead of the default help text.

@end table

@node Output Control Options, Generation Options, Interlinking Options, gjdoc Tool
@section Controlling the Output.

@table @gcctabopt
@item -d @var{directory}
Place all output files into @var{directory} (and
sub-directories). @var{directory} will be created if it does not
exist, including all non-existing parent directories and all required
sub-directories.

If not specified, output will be placed into the current directory.

@item -locale @var{name}

Use locale @var{name} instead of the default locale for all purposes.

@var{name} should be a locale specifier in the form @samp{ll_CC[_VAR]}
where @samp{ll} is a lowercase two-letter ISO-639 language code,
@samp{CC} is an optional uppercase two-letter ISO-3166 country code,
and @samp{VAR} is an optional variant code.  For example, @samp{en}
specifies English, @samp{en_US} specifies US English, and
@samp{en_US_WIN} specifies a deviant variant of the US English locale.

Note that the semantics of this option correspond exactly to those of
the constructors of class @samp{java.util.Locale}.

This option currently only determines which Collator is being used for
sorting output elements.  This means that the locale will only have an
effect when you are using non-ASCII characters in identifiers.

@item -charset @var{charset}

@emph{Deprecated.} Override the specified encoding in output XHTML
files with the one given by @samp{charset}.

If this option is not given, the encoding specification in output
XHTML is chosen to match the encoding used when writing the file (the
encoding given with @option{-docencoding}, or your platform's default
encoding).

The semantics for @var{charset} are specified here:
@w{@uref{http://www.w3.org/TR/2000/REC-xml-20001006#NT-EncName}}.  For
all practical purposes, they are identical to those of the other
options accepting charset parameters.

This option is here for compatibility with @command{javadoc} and
should be avoided.

@item -docencoding @var{charset}

Use the given charset encoding when writing output files instead of
your platform's default encoding.

Examples for @var{charset} are @samp{US-ASCII}, @samp{ISO-8859-1} or
@samp{UTF-8}.

The semantics of this option correspond exactly to those of the
constructors of class @samp{java.util.Locale}.

@item -validhtml

Force generation of valid XHTML code.  This breaks compatibility to
the traditional Javadoc tool to some extent.

If this option is specified, anchor names will be mangled so that they
are valid according to the XHTML 1.1 specification.  However, a
documentation set generated with this option cannot be linked to
properly using the traditional Javadoc tool.  It can be linked to just
fine using Gjdoc, though.

Without this option, anchor names for executable class members use the
traditional format, for example: ``foo(String,int[])''.  This is
compatible to the traditional Javadoc tool, but according to both the
HTML 4.0 and XHTML 1.0 and 1.1 specifications, this format includes
illegal characters.  Parentheses, square brackets, and the comma are
not allowed in anchor names.

@item -baseurl @var{url}

Hardwire a page URL relative to @var{url} into each generated page.

If you are generating documentation which will exclusively be
available at a certain URL, you should use this option to specify this
URL.

This can help avoid certain redirect attacks used by spammers, and it
can be helpful for certain web clients.

@end table

@node Verbosity Options, Doclet Options, Virtual Machine Options, gjdoc Tool
@section Verbosity Options

@table @gcctabopt
@item -quiet
Suppress all output except for warnings and error messages.

@item -verbose
Be very verbose about what @command{gjdoc} is doing.

This option is currently ignored.

@end table

@node Virtual Machine Options, Verbosity Options, Taglet Options, gjdoc Tool
@section Virtual Machine Options

Sun's @command{javadoc} tool seems to be based on @command{javac} and
as such it seems to operate on the VM level.  @command{gjdoc}, in
contrast, is a pure Java application.

Therefore, @command{gjdoc} can only fake, or simulate, the following
VM-level options.

@table @gcctabopt

@item -classpath @var{pathlist}
Set the Virtual Machine @samp{classpath} to @var{pathlist}.

In most cases you should use @option{-docletpath} or
@option{-tagletpath} instead of this option.

@var{pathlist} should be one or more paths to a directory or jar file,
separated by your platform's path separator (usually @samp{:} or
@samp{;}).

If this option is not intercepted at the wrapper level,
@command{gjdoc} currently fakes it by calling
@samp{System.setProperty("java.class.path", @var{pathlist});} and
outputs a warning.

@item -bootclasspath @var{pathlist}
Set the Virtual Machine @samp{bootclasspath} to @var{pathlist}.

If this option is not intercepted at the wrapper level,
@command{gjdoc} outputs a warning.

@item -J@var{vmopt}

Pass an arbitrary parameter to the Virtual Machine @command{gjdoc}
runs on.

If this option is not intercepted at the wrapper level,
@command{gjdoc} tries to emulate the option and outputs a warning.

Currently, only the VM option @option{-D} for setting system
properties is emulated.

@end table

@c man end

@comment ----------------------------------------------------------------------

@node Invoking a Custom Doclet, Option Summary by Type, Invoking the Standard Doclet, gjdoc Tool
@section Invoking a Custom Doclet

For invoking one of the other doclets shipping with @command{gjdoc} or
a third-party doclet, the canonical usage is:

@smallexample
gjdoc -s src/java/ -all \
  -docletpath /path/to/doclet.jar -doclet foo.BarDoclet \
  (more Gjdoc core options and Doclet-specific options here)
@end smallexample

@samp{/path/to/doclet.jar} is a placeholder for a class path
specifying where the Doclet classes and dependencies can be found and
@samp{foo.BarDoclet} is the fully-qualified name of the Doclet's main
class.

@comment ----------------------------------------------------------------------

@node Gjdoc Option Summary, Source Set Options, Option Summary by Type, gjdoc Tool
@section Gjdoc Option Summary
@cindex Gjdoc Options

@comment ----------------------------------------------------------------------

@node Other Doclets, Gjdoc Concepts, Doclet Options, gjdoc Tool
@chapter Generating Other Output Types

@menu
* Built-in Doclets::
* Third-party Doclets::
@end menu

@comment ----------------------------------------------------------------------

@node Built-in Doclets, Third-party Doclets, , Other Doclets
@section Using the Built-in Doclets
@cindex Built-in Doclets

@menu
* Using XmlDoclet::
* Using TexiDoclet::
* Using IspellDoclet::
* Using DebugDoclet::
@end menu

@comment ----------------------------------------------------------------------

@node Using TexiDoclet, Using XmlDoclet, , Built-in Doclets
@subsection TexiDoclet: Generating Info, PDF, and other formats
@cindex TexiDoclet

Missing.

@comment ----------------------------------------------------------------------

@node Using XmlDoclet, Using IspellDoclet, Using TexiDoclet, Built-in Doclets
@subsection XmlDoclet: Generating XML Documentation
@cindex HtmlDoclet

Missing.

@comment ----------------------------------------------------------------------

@node Using IspellDoclet, Using DebugDoclet, Using XmlDoclet, Built-in Doclets
@subsection IspellDoclet: Spell-checking Source Code
@cindex IspellDoclet

Missing.

@comment ----------------------------------------------------------------------

@node Using DebugDoclet, , Using IspellDoclet, Built-in Doclets
@subsection DebugDoclet: Inspecting the Doclet API
@cindex HtmlDoclet

Missing.

@comment ----------------------------------------------------------------------

@node Third-party Doclets, , Built-in Doclets, Other Doclets
@section Using Third-Party Doclets
@cindex Third-party Doclets

@menu
* DocBook Doclet::
* PDFDoclet::
* JUnitDoclet::
@end menu

@comment ----------------------------------------------------------------------

@node DocBook Doclet,PDFDoclet, ,Third-party Doclets
@subsection DocBook Doclet
@cindex DocBook Doclet

Missing.

@comment ----------------------------------------------------------------------

@node PDFDoclet, JUnitDoclet, DocBook Doclet, Third-party Doclets
@subsection PDFDoclet
@cindex PDFDoclet

Missing.

@comment ----------------------------------------------------------------------

@node JUnitDoclet, , PDFDoclet, Third-party Doclets
@subsection JUnitDoclet
@cindex JUnitDoclet

Missing.

@comment ----------------------------------------------------------------------

@node Gjdoc Concepts, , Other Doclets, gjdoc Tool
@chapter Advanced Concepts

@menu
* Writing Doclets::
* Taglets::
* XHTML Fragments::
* First Sentence Detector::
* Adding Custom Resources::
@end menu

@comment ----------------------------------------------------------------------

@node Taglets, Writing Doclets, , Gjdoc Concepts
@section Adding Custom Tags to the Documentation
@cindex Taglet

Missing.

@comment ----------------------------------------------------------------------

@node Writing Doclets, XHTML Fragments, Taglets, Gjdoc Concepts
@section Writing Doclets
@cindex Taglet

If the various Doclets already available don't suit your needs, you
can write a custom Doclet yourself.  

@menu
* Doclet Invocation Interface::
* Using AbstractDoclet::
* GNU Doclet SPI::
@end menu

@comment ----------------------------------------------------------------------

@node Doclet Invocation Interface, Using AbstractDoclet, , Writing Doclets
@subsection Implementing the Doclet Invocation Interface

A Doclet is a class that contains a method with the following
signature:

@smallexample
public static boolean start(RootDoc rootDoc);
@end smallexample

@var{rootDoc} is the root of an object hierarchy containing the
information @command{gjdoc} extracted from the source files.  See the
Doclet API for more details.

@samp{start} should process all the information and return
@samp{true} on success, @samp{false} on failure.

For printing status information, the Doclet should use methods
@samp{printNotice}, @samp{printWarning} and @samp{printError} instead
of @samp{System.err}.  The Doclet can opt to use @samp{System.out} for
redirectable output.

@comment ----------------------------------------------------------------------

@node Using AbstractDoclet, GNU Doclet SPI, Doclet Invocation Interface, Writing Doclets
@subsection Deriving Your Doclet from AbstractDoclet
@cindex AbstractDoclet

You may want your Doclet to provide functionality similar to
HtmlDoclet.  For example, you may want it to support Taglets, generate
Index, Tree, and Uses pages, or show other cross-reference information
like @samp{Overrides} and @samp{All Implementing Classes}.

This information is not directly provided by the Doclet API, so your
Doclet would normally have to assemble it itself.  For example, it
would have to add the names of all program elements to a list and sort
this list in order to create the Index page.

If you want to provide this information or part of it, you should
consider deriving your class from
@samp{gnu.classpath.tools.doclets.AbstractDoclet}.  This class
provides the following benefits:

@itemize @bullet

@item 
Handles options @option{-tag}, @option{-taglet}, @option{-tagletpath}
(Taglets)

@item 
Provides standard taglets for @@version, @@author, @@since, @@serial,
@@deprecated, @@see, @@param, @@return and handles all related options
(@option{-version}, @option{-author}, @option{-nosince},
@option{-nodeprecated})

@item 
Handles option @option{-d} (destination directory)

@item 
Handles option @option{-noqualifier} (classes to omit qualifier for)

@item 
Handles options @option{-docfilessubdirs} and
@option{-excludedocfilessubdir} (resource copying)

@item 
Can generate a full index or an index split by first letter

@item 
Can generate a full tree and package trees

@item 
Can generate cross-reference information

@item 
Can aggregate interface information (all superinterfaces, all
subinterfaces, all implementing classes)

@item 
Provides convenient access to constructors, fields, methods, and inner
classes sorted by name/signature instead of the default sort order.

@item 
Provides various other convenience methods

@end itemize

If you derive from @samp{AbstractDoclet}, there are a number of things
you need to take care of:

@itemize @bullet

@item 

@end itemize

you should not implement the
@samp{start(RootDoc)} method as it is already defined by
@samp{AbstractDoclet} so that it can care about parsing the options.

Instead, you implement method @samp{run()}, @samp{getOptions()} and
the other abstract methods to define your Doclet's behavior.

Note that all information provided by @samp{AbstractDoclet} is
evaluated lazily.  That is, if your Doclet doesn't need to create an
Index page, then @samp{AbstractDoclet} will not spend resources on
creating the corresponding information.

See the API documentation for
@samp{gnu.classpath.tools.doclets.AbstractDoclet} for more details.

You should be aware that if you base your Doclet on
@samp{AbstractDoclet} then you have to bundle this and all related
classes with your Doclet, with all implications such as possible
licensing issues.  Otherwise, your Doclet will only be runnable on
@samp{gjdoc} and not on other documentation systems.  Also note that
@samp{AbstractDoclet} has not been extensively tested in environments
other than @samp{gjdoc}.

@comment ----------------------------------------------------------------------

@node GNU Doclet SPI, , Using AbstractDoclet, Writing Doclets
@subsection Preparing for the GNU Doclet Service Provider Interface
@cindex GNU Doclet SPI, Service Provider, SPI

In addition to the standard Doclet invocation interface described
above, @command{gjdoc} also offers a Service Provider Interface
conforming to the Java standard.  Adding support for this interface to
your Doclet simplifies usage for @command{gjdoc} users because it
makes your Doclet ``discoverable''.

In order to provide the alternate interface, you have to add a class
implementing @samp{gnu.classpath.tools.gjdoc.spi.DocletSpi} to your
Doclet classes, and bundle all Doclet classes in a Jar file along with
a file named
@samp{META_INF/services/gnu.classpath.tools.gjdoc.spi.DocletSpi} which
contains the name of your class implementing DocletSpi on a single
line.

Note that if your Doclet depends on third-party classes bundled in
separate Jar files, you can link in these classes using the
@samp{Class-path:} Manifest attribute of your Doclet Jar.

Your Doclet can then be invoked in one of the following ways:
@smallexample
gjdoc -docletjar /path/to/doclet.jar
gjdoc -docletpath /path/to/doclet.jar -docletname @var{docletname}
gjdoc -docletname @var{docletname}
@end smallexample

Here, @var{docletname} is the name of your doclet as returned by
@samp{DocletSpi.getDocletName()}.

The last example will only work if your Doclet Jar is in
@command{gjdoc}'s @file{doclets} directory or if it is on the
classpath.

@comment ----------------------------------------------------------------------

@node XHTML Fragments, First Sentence Detector, Writing Doclets, Gjdoc Concepts
@section Well-formed Documentation Fragments
@cindex XHTML Fragments

For many Doclets it is advantagous if the HTML code in the comments
and HTML code passed via the command line is well-formed.  For
example, HtmlDoclet outputs XHTML code, and XmlDoclet XML code, both
of which results in invalid files if the user-specified HTML isn't
wellformed.

Unfortunately, comments were never required to contain well-formed
HTML code, which means that every Doclet must deal with non-wellformed
code as well.

The @command{gjdoc} built-in Doclets deal with this problem by
``fixing'' the HTML code - making sure that all tags are closed,
attribute values are provided and quoted, tags are properly nested,
etc.

This approach works OK in most instances, but since it uses some crude
heuristics it can sometimes produce undesirable result.

Therefore, in order to make sure that your comments are always
properly formatted, make sure they are well-formed as described in
@w{@uref{http://www.w3.org/TR/xhtml1/#h-4.1, XHTML 1.0: Documents must
be well-formed}}.

In addition, you should use meaningful tags instead of text formatting
tags to make your output look better in other output formats derived
from your HTML code.  For example, you should use the <em> tag instead
of <b> if you want to emphasize text.

@comment ----------------------------------------------------------------------

@node First Sentence Detector, Adding Custom Resources, XHTML Fragments, Gjdoc Concepts
@section How Gjdoc Determines where the First Sentence Ends
@cindex First Sentence Detector

For a package, class or member summary, @command{gjdoc} only shows the
first sentence of the documentation comment in question.  Because
@command{gjdoc} is not human, it is not always obvious to
@command{gjdoc} where the first sentence ends.

You might be tempted to say that the first sentence ends at the first
occurrence of a punctuation character like @samp{.} or
@samp{!}. However, consider examples like this:
@smallexample
This work, by Thomas J. Shahan et al., is about the middle ages.
@end smallexample

As you can see, it is not trivial to determine the end of the
sentence.

@command{gjdoc} gives you the choice between two approaches.  By
default it uses built-in heuristics which should be compatible to
Sun's @command{javadoc} tool.  This approach works quiet well in most
cases, at least for english comments.

Alternatively, you can specify option @option{-breakiterator} in which
case @command{gjdoc} will use
@samp{java.text.BreakIterator.getSentenceInstance(@var{locale}).next()}
to find the end of sentence, where @var{locale} is the locale
specified by option @samp{-locale} or the default locale if none
specified.

@emph{NOT YET IMPLEMENTED:}

@command{gjdoc} also allows you to explicitly delineate the first
sentence by putting it in a @samp{<span>} tag with the CSS class
@samp{first-sentence}.  For example:
@smallexample
/**
 *  <span class="first-sentence">This. is. the. first. 
 *  sentence.</span> This is the second sentence.
 */
@end smallexample

Note that this will only work with @command{gjdoc}, but shouldn't hurt
when using another documentation system since the @samp{<span>} tag
usually doesn't show up in the output.

@comment ----------------------------------------------------------------------

@node Adding Custom Resources, , First Sentence Detector, Gjdoc Concepts
@section Adding Images and Other Resources
@cindex First Sentence Detector

Sometimes you want to decorate your documentation with secondary
resources such as images, SVG graphics, applets, and so on.  To do so,
simply put the required files in a subdirectory 'doc-files' in the
package directory corresponding to the documentation entry you want to
decorate, and refer to it with the URL
@samp{doc-files/@var{filename}}.

For example, if you want to add an image to the description of class
@samp{baz.FooBar}, create a directory @file{doc-files} in the
directory @file{baz} containing @file{FooBar.java} and put your file,
say @file{diagram.png}, into that directory.  Then, add the HTML code
like this to a comment in @file{FooBar.java}:
@smallexample
<img src="doc-files/diagram.png" width="200" height="150"
  alt="Foo Diagram"/>
@end smallexample

This works because the @file{doc-files} subdirectories will be copied
to the target documentation directory every time you generate the
documentation.  

Note however that by default, the @file{doc-files} directory will not
be copied deeply.  In other words, if you create subdirectories under
@file{doc-files} they will not be copied and any resources located in
these subdirectories will not be accessible in your generated
documentation.  You can specify option @option{-docfilessubdirs} to
remove this limitation.

Sometimes you want to use option @option{-docfilessubdirs}, but there
are certain directories which you don't want to be copied, for example
because they contain source files for the resources in
@file{doc-files}.  For cases like this, use
@option{-excludedocfilessubdir} to specify directories to be omitted.

@comment ----------------------------------------------------------------------

@node I18N Issues, , Other Tools, Top
@comment node-name, next, previous, up
@chapter I18N Issues

Some tools --@pxref{Security Tools}-- allow using other than the English language when prompting the User for input, and outputting messages. This chapter describes the elements used to offer this support and how they can be adapted for use with specific languages.

@menu
* Language Resources::         Where resources are located
* Message Formats::            How messages are internationalized
@end menu

@comment ----------------------------------------------------------------------

@node Language Resources, Message Formats, I18N Issues, I18N Issues
@comment node-name, next, previous, up
@section Language-specific resources

The Tools use Java @code{ResourceBundle}s to store messages, and message templates they use at runtime to generate the message text itself, depending on the locale in use at the time.

The @i{Resource Bundles} these tools use are essentially Java @i{Properties} files consisting of a set of @i{Name/Value} pairs. The @i{Name} is the @i{Property Name} and the @i{Value} is a substitution string that is used when the code references the associated @i{Name}. For example the following is a line in a @i{Resource Bundle} used by the @code{keytool} Tool:

@example
Command.23=A correct key password MUST be provided
@end example

When the tool needs to signal a mandatory but missing key password, it would reference the property named @code{Command.23} and the message "@kbd{A correct key password MUST be provided}" will be used instead. This indirect referencing of "resources" permits replacing, as late as possible, the English strings with strings in other languages, provided of course @i{Resource Bundles} in those languages are provided.

For the GNU Classpath Tools described in this Guide, the @i{Resource Bundles} are files named @file{messages[_ll[_CC[_VV]]].properties} where:

@ftable @var
@item ll
Is the 2-letter code for the Language,
@item CC
Is the 2-letter code for the Region, and
@item VV
Is the 2-letter code for the Variant of the language.
@end ftable

The complete list of language codes can be found at @uref{http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt, Code for the representation of names of languages}. A similar list for the region codes can be found at @uref{http://userpage.chemie.fu-berlin.de/diverse/doc/ISO_3166.html, ISO 3166 Codes (Countries)}.

The location of the @i{Resource Bundles} for the GNU Classpath Tools is specific to each tool. The next table shows where these files are found in a standard GNU Classpath distribution:

@ftable @code
@item jarsigner
@file{gnu/classpath/tools/jarsigner}
@item keytool
@file{gnu/classpath/tools/keytool}
@end ftable

The collection of @i{Resource Bundles} in a location act as an inverted tree with a parent-child relationship. For example suppose in the @file{gnu/classpath/tools/keytool} there are 3 message bundles named:

@enumerate
@item @code{messages.properties}
@item @code{messages_fr.properties}
@item @code{messages_fr_FR.properties}
@end enumerate

In the above example, bundle #1 will act as the parent of bundle #2, which in turn will act as the parent for bundle #3. This ordering is used by the Java runtime to choose which file to load based on the set Locale. For example if the Locale is @code{fr_CH}, @code{messages_fr.properties} will be used because (a) @code{messages_fr_CH.properties} does not exist, but (b) @code{messages_fr.properties} is the parent for the required bundle, and it exists. As another example, suppose the Locale was set to @code{en_AU}; then the tool will end up using @code{messages.properties} because (a) @code{messages_en_AU.properties} does not exist, (b) @code{messages_en.properties} which is the parent for the required bundle does not exist, but (c) @code{messages.properties} exists and is the root of the hierarchy.

You can see from the examples above that @file{messages.properties} is the safety net that the Java runtime falls back to when failing to find a specific bundle and its parent(s). This file is always provided with the Tool. In time, more localized versions will be included to cater for other languages.

In the meantime, if you are willing to contribute localized versions of these resources, grab the @file{messages.properties} for a specific tool; translate it; save it with the appropriate language and region suffix and mail it to @code{classpath@@gnu.org}.

@comment ----------------------------------------------------------------------

@node Message Formats, , Language Resources, I18N Issues
@comment node-name, next, previous, up
@section Message formats

If you open any of the @file{messages.properties} described in the previous section, you may see properties that look like so:

@example
Command.67=Issuer: @{0@}
Command.68=Serial number: @{0,number@}
Command.69=Valid from: @{0,date,full@} - @{0,time,full@}
Command.70=\ \ \ \ \ until: @{0,date,full@} - @{0,time,full@}
@end example

These are @i{Message Formats} used by the tools to customize a text string that will then be used either as a prompt for User input or as output.

If you are translating a @file{messages.properties} be careful not to alter text between curly braces.

@comment ----------------------------------------------------------------------

@bye
