javac [ options ] files
is the Java compiler; it compiles Java source code (in
.java files) into Java byte codes (in
.class files). The Java compiler is itself
written in Java.
javac can be passed any number of Java source
files, whose names must all end with the .java
extension. javac produces a separate
.class class file for each class defined in the
source files. Each source file can contain any number of classes,
although only one can be a public top-level class.
The name of the source file (minus the .java
extension) must match the name of the public class
In Java 1.2
and later, if a filename specified on the command line begins with
the character @, that file is taken not as a Java
source file but as a list of compiler options and Java source files.
Thus, if you keep a list of Java source files for a particular
project in a file named project.list, you can
compile all those files at once with the command:
% javac @project.list
To compile a source file, javac must be able to
find definitions of all classes used in the source file. It looks for
definitions in both source-file and class-file form, automatically
compiling any source files that have no corresponding class files or
that have been modified since they were most recently compiled.
The most commonly used compilation options
include the following:
- -classpath path
Specifies the path javac uses to look up classes
referenced in the specified source code. This option overrides any
path specified by the CLASSPATH environment
variable. The path specified is an ordered
list of directories, ZIP files, and JAR archives, separated by colons
on Unix systems or semicolons on Windows systems. If the
-sourcepath option is not set, this option also
specifies the search path for source files.
- -d directory
Specifies the directory in which (or beneath which) class files
should be stored. By default, javac stores the
.class files it generates in the same directory
as the .java files those classes were defined
in. If the -d option is specified, however, the
specified directory is treated as the root
of the class hierarchy, and .class files are
placed in this directory or the appropriate subdirectory below it,
depending on the package name of the class. Thus, the following
% javac -d /java/classes Checkers.java
places the file Checkers.class in the directory
/java/classes if the
Checkers.java file has no
package statement. On the other hand, if the
source file specifies that it is in a package:
the .class file is stored in
/java/classes/com/davidflanagan/games. When the
-d option is specified, javac
automatically creates any directories it needs to store its class
files in the appropriate place.
- -encoding encoding-name
Specifies the name of the character encoding used by the source files
if it differs from the default platform encoding.
Tells javac to add line number, source file, and
local variable information to the output class files, for use by
debuggers. By default, javac generates only the
Tells javac to include no debugging information
in the output class files. Java 1.2 and later.
- -g :keyword-list
javac to output the types of debugging
information specified by the comma-separated
keyword-list. The valid keywords are:
source, which specifies source-file information;
lines, which specifies line number information;
and vars, which specifies local variable debugging
information. Java 1.2 and later.
Prints a list of options. See also -X.
- -J javaoption
Passes the argument javaoption directly
through to the Java interpreter. For example:
should not contain spaces; if multiple arguments must be passed to
the interpreter, use multiple -J options. Java 1.1
- -source release-number
Specifies the version of Java the code is written in. Legal values of
release-number are 5, 1.5, 1.4, and 1.3. The
options 5 and 1.5 are synonyms and are the default: the compiler
accepts all Java 5.0 language features. Use -source
1.4 to have the compiler ignore Java 5.0 language features
such as the enum keyword. Use -source
1.3 to have the compiler ignore the
assert keyword that was introduced in Java 1.4.
This option is available in Java 1.4 and later.
- -sourcepath path
Specifies the list of
directories, ZIP files, and JAR archives that
javac searches when looking for source files.
The files found in this source path are compiled if no corresponding
class files are found or if the source files are newer than the class
files. By default, source files are searched for in the same places
class files are searched for. Java 1.2 and later.
Tells the compiler to display messages about what it is doing. In
particular, it causes javac to list all the
source files it compiles, including files that did not appear on the
Tells the javac compiler to display usage
information for its nonstandard options (all of which begin with
-X). Java 1.2 and later.
The following options control the generation of warning messages by
Tells javac to issue a warning for every use of
a deprecated API. By default, javac issues only
a single warning for each source file that uses deprecated APIs. Java
1.1 and later. In Java 5.0, this is a synonym for
Tells javac not to print warning messages.
Errors are still reported as usual.
Enables all recommended warnings about program
At the time of this writing, all the warnings detailed below are
- -Xlint :warnings
Enables or disables a comma-separated list of named warning types. At
the time of this writing, the available warning types are the
following. A named warning can be suppressed by preceding it with a
Enables all lint warnings.
Warns about the use of deprecated APIs. See also
Warns when a case in a switch
statement "falls through" to the
next case. See also -Xswitchcheck.
Warns when a finally clause cannot complete
Warns if any path directories specified elsewhere on the command line
Warns about Serializable classes that do not have
a serialVersionUID field.
Provides detailed warnings about each unchecked use of a generic type.
- -Xmaxerrors num
Don't print more than num
- -Xmaxwarns num
Don't print more than num
- -Xstdout filename
Tells javac to send warning and error messages
to the specified file instead of writing them to the console. Java
1.4 and later.
Warns about case clauses in
switch statements that "fall
through." In Java 5.0, use
options are useful when
using javac to compile class files intended to
run under a different version of Java:
- -bootclasspath path
Specifies the search path javac uses to look up
system classes. This option does not specify the system classes used
to run the compiler itself, only the system classes read by the
compiler. Java 1.2 and later.
- -endorseddirs path
Overrides the directories to search for endorsed standards JAR files.
- -extdirs path
Specifies a list of directories to search for standard extension JAR
files. Java 1.2 and later.
- -target version
Specifies the class file format version to use for the generated
class files. version may be 1.1, 1.2, 1.3, 1.4,
1.5, or 5. The options 1.5 and 5 are synonyms and are the default in
Java 5.0, unless -source 1.4 is specified, in
which case -target 1.4 is the default. Use of this
flag sets the class file version number so that the resulting class
file cannot be run by VMs from previous releases.
- -Xbootclasspath :path
An alternative to -bootclasspath
- -Xbootclasspath/a :path
Appends the specified path to the
bootclasspath. Java 1.3 and later.
- -Xbootclasspath/p :path
Prefixes the bootclasspath with the specified
Specifies an ordered list
(colon-separated on Unix, semicolon-separated on Windows systems) of
directories, ZIP files, and JAR archives in which
javac should look for user class files and
source files. This variable is overridden by the