javac - The Java Compiler

javac compiles Java programs.


javac [ options ] ...
javac_g [ options ] ...


The javac command compiles Java source code into Java bytecodes. You then use the Java interpreter - the java command - to interprete the Java bytecodes.

Java source code must be contained in files whose filenames end with the .java extension. The file name must be constructed from the class name, as, if the class is public or is referenced from another source file.

For every class defined in each source file compiled by javac, the compiler stores the resulting bytecodes in a class file with a name of the form classname.class. Unless you specify the -d option, the compiler places each class file in the same directory as the corresponding source file.

When the compiler must refer to your own classes you need to specify their location. Use the -classpath option or CLASSPATH environment variable to do this. The class path is a sequence of directories (or zip files) which javac searches for classes not already defined in any of the files specified directly as command arguments. The compiler looks in the class path for both a source file and a class file, recompiling the source (and regenerating the class file) if it is newer.

Set the property javac.pipe.output to true to send output messages to System.out. Set javac.pipe.output to false, that is, do not set it, to send output messages to System.err.

javac_g is a non-optimized version of javac suitable for use with debuggers like jdb.


-classpath path
Specifies the path javac uses to look up classes. Overrides the default or the CLASSPATH environment variable if it is set. Directories are separated by colons. It is often useful for the directory containing the source files to be on the class path. You should always include the system classes at the end of the path. For example:
   javac -classpath .:/home/avh/classes:/usr/local/java/classes ...

-d directory
Specifies the root directory of the class file hierarchy. For example, doing:
   javac -d /home/avh/classes
causes the class files for the classes in the source file to be saved in the directory /home/avh/classes/demos/awt, assuming that the classes are defined in the package demos/awt.

Note that the -d and -classpath options have independent effects. The compiler reads only from the class path, and writes only to the destination directory. It is often useful for the destination directory to be on the class path. If the -d option is not specified, the source files should be stored in a directory hierarchy which reflects the package structure, so that the resulting class files can be easily located.

-encoding encoding name
Specify the source file encoding name, such as EUCJIS/SJIS. If this option is not specified, then the platform default converter is used.

Enables generation of debugging tables. Debugging tables contain information about line numbers and local variables - information used by Java debugging tools. By default, only line numbers are generated, unless optimization (-O) is turned on.

Turns off warnings. If used the compiler does not print out any warnings.

Optimizes compiled code by inlining static, final and private methods. Note that your classes may get larger in size.

Causes the compiler and linker to print out messages about what source files are being compiled and what class files are being loaded.

This option makes the compiler consider recompiling class files which are referenced from other class files. Normally, it only recompiles missing or out-of-date class files that are referred to from source code.

Passes through the string javaoption as a single argument to the Java interpreter which runs the compiler. The argument should not contain spaces. Multiple argument words must all begin with the prefix -J, which is stripped. This is useful for adjusting the compiler's execution environment or memory usage.


Used to provide the system a path to user-defined classes. Directories are separated by colons, for example,


java, jdb, javah, javap, javadoc,