大家知道,在默认情况下,Java程序在编译和运行的时候,会通过JRE下的rt.jar文件和CLASSPATH环境变量所指定的路径进行类的搜索和加载,但是如果有时需要动态为Java程序指定类加载路径,那该怎么办?
有的时候,为了动态的为Java程序指定类加载路径,开发者会写出一些批处理文件来进行Java程序的编译或允许,如Windows的bat文件和Linux下的sh文件。此时,就有一个问题了,这些Java程序可能在不同的环境下,需要的类是不同的,因此,就需要使用java和javac提供给开发者的选项进行编译或运行。
动态的提供类加载路径的选项有俩个即-cp和-classpath,它们的作用是一样的,都是指定CLASSPATH的意思。开发者只需要在选项后面加上路径或路径变量即可。下面为一个HelloWorld程序提供额外的jar文件到CLASSPATH中。
javac -cp D:\work\java\log4j.jar HelloWorld.java
java -cp D:\work\java\log4j.jar HelloWorld
或
javac -classpath D:\work\java\log4j.jar HelloWorld.java
java -classpath D:\work\java\log4j.jar HelloWorld
此时,JVM就会把选项指定的jar文件作为CLASSPATH的一个部分。当然,不仅是jar文件,也可以是一个路径或一个环境变量,例如:
set TEST=d:\test\java
javac -cp %TEST% HelloWorld.java
java -cp %TEST% HelloWorld
所以,可以这样解答:
JDK中的java和javac命令,提供了-cp和-classpath选项为Java程序动态地指定类搜索路径,它们的使用方法比较简单,只需要把相应的目录路径或jar文件路径跟在选项后面即可。