Classpath is a parameter in the Java Virtual Machine or the Java compiler that specifies the location of user-defined classes and packages. The parameter may set either on the command-line, or through an environment variable
Setting the path to execute Java programs
Supplying as application argument
Suppose we have a package called
org.mypackage containing the classes:
- HelloWorld (main class)
- SupportClass
- UtilClass
and the files defining this package are stored physically under the directory
D:\myprogram (on
Windows) or
/home/user/myprogram (on
Linux).
The file structure looks like this:
Microsoft Windows | Linux |
D:\myprogram\
|
---> org\
|
---> mypackage\
|
---> HelloWorld.class
---> SupportClass.class
---> UtilClass.class
| /home/user/myprogram/
|
---> org/
|
---> mypackage/
|
---> HelloWorld.class
---> SupportClass.class
---> UtilClass.class
|
When we invoke Java, we specify the name of the application to run: org.mypackage.HelloWorld. However we must also tell Java where to look for the files and directories defining our package. So to launch the program, we use the following command:
Microsoft Windows | Linux |
java -classpath D:\myprogram org.mypackage.HelloWorld
| java -cp /home/user/myprogram org.mypackage.HelloWorld
|
where:
java
is a java application launcher, a type of sdkTool(A command-line tool, such as javac, javadoc, or apt)
- -classpath D:\myprogram sets the path to the packages used in the program (on Linux, -cp /home/user/myprogram) and
- org.mypackage.HelloWorld is the name of the main class
Setting the path through an environment variable
The
environment variable named
CLASSPATH
may be alternatively used to set the classpath. For the above example, we could also use on Windows:
set CLASSPATH=D:\myprogram
java org.mypackage.HelloWorld
The rule is that
-classpath
option, when used to start the java application, overrides the
CLASSPATH
environment variable. If none are specified, the
current working directory is used as classpath. This means that when our working directory is
D:\myprogram\
(on Linux,
/home/user/myprogram/
), we would not need to specify the classpath explicitly. When overriding however, it is advised to include current folder
"."
into the classpath in the case when loading classes from current folder is desired.
The same applies not only to java launcher but also to
javac, the java compiler.
Setting the path of a Jar file
If a program uses a supporting library enclosed in a
Jar file called
supportLib.jar, physically in the directory
D:\myprogram\lib\ and the corresponding physical file structure is:
D:\myprogram\
|
---> lib\
|
---> supportLib.jar
|
---> org\
|
--> mypackage\
|
---> HelloWorld.class
---> SupportClass.class
---> UtilClass.class
the following
command-line option is needed:
java -classpath D:\myprogram;D:\myprogram\lib\supportLib.jar org.mypackage.HelloWorld
or alternatively:
set CLASSPATH=D:\myprogram;D:\myprogram\lib\supportLib.jar
java org.mypackage.HelloWorld
Adding all JAR files in a directory
In
Java 6 and higher, one can add all jar-files in a specific directory to the classpath using wildcard notation.
Windows example:
java -classpath ".;c:\mylib\*" MyApp
Linux example:
java -classpath '.:/mylib/*' MyApp
This works for both
-classpath
options and environment classpaths.