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 needed to run javac or being referenced by other classes you are compiling. 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. In other words, this is essentially a destination directory for your compiled classes. For example, doing: javac -d /home/avh/classes causes the compiled class files for the classes in the source file to be saved in the directory /home/avh/classes. If your classes are defined in the package demos/awt, the class files would be placed in the directory /home/avh/classes/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.

Enables deprecation warnings. The compiler will emit a warning for each use of a deprecated member or class (unless the deprecated member or class is also being compiled or recompiled). A class or member is deprecated if it contains a documentation comment with the tag @deprecated.

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.

Causes recompilation of class files on which the source files given as command line arguments recursively depend. Without this option, only files that are directly depended on and missing or out-of-date will be recompiled. Recompilation does not extend to missing or out-of-date files only depended on by already up-to-date class files.

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.


Compiling One or More Classes

In this example, the source files are located at /home/ws/src/java/awt/*.java. Change to the directory holding the class or classes that you want to compile. Then run javac, supplying one or more class names. % cd /home/ws/src/java/awt/ % javac Compiles the two classes.


Used to provide the system a path to user-defined classes. Directories are separated by colons, for example, .:/home/avh/classes:/usr/local/java/classes


java, jdb, javah, javap, javadoc, CLASSPATH