[Java] CLASSPATH环境变量的设置是否是必须的

以前学习过Java 的读者可能对 CLASSPATH 环境变量不陌生,几乎每一本介绍Java 入门的图书里
都会介绍 CLASSPATH 环境变量的设置,但对于 CLASSPATH 环境变量的作用则常常语焉不详。


实际上,如果使用1.5以上版本的JDK , 完全可以不用设置CLASSPATH 环境变量


那么CLASSPATH 环境变量的作用是什么呢?

当使用"java Java 类名"命令来运行Java 程序时,
JRE 到哪里去搜索Java 类呢?可能有读者会回答, 在当前路径下搜索啊。这个回答很聪明,但1. 4 以前
版本的JDK 都没有设计这个功能,这意味着即使当前路径己经包含了 HelloWorld.class , 并在当前路径
下执行"java Hello World ",系统将一样提示找不到HelloWorld 类。


如果使用1.4 以前版本的JDK,则需要在CLASSPATH 环境变量中添加点 (.) ,用以告诉JRE 需要
在当前路径下搜索Java 类。


除此之外, 编译和运行Java 程序还需要JDK 的lib 路径下 dt.jar 和 tools.jar 文件中的 Java 类, 因此
还需要把这两个文件添加到CLASSPATH 环境变量里。

提示:JDK9 的 lib 目录已经不再包含 dt.jar 和 tools .jar 文件。

因此, 如果使用1.4 以前版本的JDK 来编译和运行Java 程序,常常需要设置 CLASSPATH 环境变
量的值为.;%JAVA HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar (其中%JAVA HOME%代表JDK 的安
装目录) 。

提示:只有使用早期版本的 JDK 时, 才需要设置 CLASSPATH 环境变量。

当然,即使使用JDK l. 5 以上版本的JDK ,也可以设置CLASSPATH 环境变量(通常用于加载第三
方类库) , 一旦设置了该环境变量, JRE 将会按该环境变量指定的路径来搜索Java 类。这意味着如果
CLASSPATH 环境变量中不包括点(.) ,也就是没有包含当前路径, JRE 不会在当前路径下搜索Java 类。

如果想在运行Java 程序时临时指定JRE 搜索Java 类的路径,则可以使用classpath 选项(或用-cp
选项, -cp 是简写,作用完全相同),即按如下格式来运行Java 命令:

java - classpath dirl;dir2;dir3 .. .; dirN Java 类

-classpath 选项的值可以是一系列的路径,多个路径之间在Windows 平台上以分号(;) 隔开,在
Linux 平台上则以冒号(:) 隔开。

如果在运行Java 程序时指定了-classpath 选项的值, JRE 将严格按-classpath 选项所指定的路径来搜
索Java 类,即不会在当前路径下搜索Java 类, CLASSPATH 环境变量所指定的搜索路径也不再有效。

如果想使CLASSPATH 环境变量指定的搜索路径有效,而且还会在当前路径下搜索Java 类,则可
以按如下格式来运行Java 程序:
java - classpath %CLASSPATH % ; .; dirl ; dir2 ; dir3.. .;dirN Java 类

上面命令通过%CLASSPATH%来引用CLASSPATH 环境变量的值,并在-classpath 选项的值里添加
了一个点,强制JRE在当前路径下搜索Java 类。

相关推荐