classpath 简介
来源:互联网 发布:java免费开源网店系统 编辑:程序博客网 时间:2024/05/18 01:45
一、基本用法
classpath 是 Java 最重要的基础概念之一。它是一个编译和运行时都要用到的参数。当没有这个参数时,java 和 javac 命令会取环境变量 CLASSPATH 来代替。如:
javac -classpath . Class1.java
那么 javac 便会以当前目录(.)作为 classpath。你也可以先将环境变量 CLASSPATH 的值设为“.”,然后执行
javac Class1.java
效果是一样的。注意,如果你指定了参数,那么环境变量就会被忽略。所以二者只会取其一。
二、classpath 的作用
classpath 用来指向系统现有任何一个位置的 java 程序。这样能够提高复用性。比如程序 b 需要用到程序 a当中的类,那么我不需要将 a 拷贝到 b 那里,只需要在运行 b 的命令中将 classpath 指向 a,那么 b 就可以顺利的引用 a的类了。
我们知道,java 程序就是某个目录下的一堆 .class 文件,或者打好包的 .jar 文件。所以 classpath 所包含的,也就是目录或 .jar 文件的路径。如果要指向多个程序,路径之间就要用“;”隔开。下面是一个例子:
-classpath .;C:/commons-lang-2.1.jar;C:/commons-collections-3.1.jar
这个 classpath 就依次包含了一个目录和两个 jar 包。
三、组织 classpath
当 classpath 很长的时候,我们可以将它们组织一下。为了运行方便,java 程序通常都会提供一个批处理文件(如 run.bat)。文件的内容类似于下面的:
set path=%CLASSPATH%;commons-lang-2.1.jar;
set path=%path%;program.jar
java -classpath %path% MainClass
那么就算 classpath 再长,也可以像第二行那样化整为零,添加删除都很方便。这比用环境变量方便的多,所以建议不要依赖于 CLASSPATH 环境变量。
像 commons-lang、commons-collections 等这些类库都是很多 java 程序要经常用到的。我们可以将它们放在一起,然后写一个批处理文件将这些文件都包含到变量中,编译或运行时将这个变量赋给 classpath 参数即可。
四、一个小例子
假设我有一个类库 C:/commons-lang-2.1.jar,我在 D 盘根目录下创建一个类,内容如下:
import org.apache.commons.lang.StringUtils;
public class Class1 {
public static void main(String[] args){
System.out.println(StringUtils.isEmpty(null));
}
}
其中 StringUtils 这个类是包含在 commons-lang-2.1.jar 当中的,所以编译和运行时需要使用 classpath 来指定。
那么编译命令为:
D:/>javac -classpath C:/commons-lang-2.1.jar Class1.java
运行命令为:
D:/>java -classpath .;C:/commons-lang-2.1.jar Class1
注意两个命令的 classpath 参数稍有不同。当指定了 classpath 参数时,java 命令只会在 classpath 中寻找类。所以要执行当前目录下的类,就必须将当前目录加入 classpath。
不管哪种 Java IDE,在配置项目的时候都会有一个“依赖关系”,这就是用来在编译或运行的时候生成 classpath 参数的。
总之,classpath 这东西还是不难理解的。另外留个题目:如果 classpath 中的多个路径都包含 com.program.Class1,那么编译时和运行时会使用哪一个呢?请写程序证明一下。
- classpath 简介
- classpath 简介
- classpath 简介
- classpath
- classpath
- CLASSPATH
- classpath
- classpath
- classpath
- classpath
- classpath
- classpath
- CLASSPATH
- classpath
- classpath
- CLASSPATH
- classpath
- classpath
- Linux查看文件夹大小的命令
- Java IO学习
- 如何使用Java中的Date和Calendar类
- EF - 添加Cloned对象
- Eclipse自动生成注释
- classpath 简介
- JAVA反射类
- 网络性能监听工具:Solaris --snoop//Linux--tcpdump//AIX --iptrace//Windows --sniffor
- linux上打tar包以及释放的指令,还有释放以及打其它压缩包的指令
- ASP程序实现网页伪静态页源代码
- XML 命名空间NameSpace
- 我的未来在哪里……
- XMLNameSpace----XML命名空间
- Select下拉列表框(添加、删除option)