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

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

@setchapternewpage on

@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
This file documents the Tools included in a standard distribution of the GNU
Classpath project deliverables.

Copyright (C) 2006, 2007 Free Software Foundation, Inc.

@ifnotplaintext
@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
Copyright @copyright{} 2006 Free Software Foundation, Inc.
@sp 2
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 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}  @gccoptlist{-bootclasspath}  @gccoptlist{-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.7 2008/08/13 13:32:05 jsumali Exp $
@end smallexample

Then the HTML output will contain something like

@smallexample
CVS ID:
  $Id: cp-tools.texinfo,v 1.7 2008/08/13 13:32:05 jsumali 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
