Java中的classpath
作者:网络转载 发布时间:[ 2013/2/18 10:14:05 ] 推荐标签:
CLASSPATH是Java中重要的概念之一,但通常都被忽视了。不清楚classpath不会知道java如何定位你的类文件。
CLASSPATH是一个环境变量,使Java定位用户定义的类。在Windows中,可以在系统属性->高级->环境变量中设置它。
Windows可以输入 echo %CLASSPATH%查看设置。
运行程序的时候,可以通过参数 -cp,或者-classpath来重新指定classpath,而不必从环境变量中获取。这也是让不同的应用程序使用不同的classpath的好的办法。
比如,命令
java -classpath c:classes;c:jarabc.jar;c:zipabc.zip;c:src abc
默认的CLASSPATH指向当前的路径,查询当前路径下的类、
如果你有多个目录定义在CLASSPATH变量中,Java会查询从第一个目录中查找,只有在第一个目录中未找到的时候,才会接着在第二个目录中找。这是个非常有用的特性。比如:
有一个CLASSPATH=/home/tester/first:/home/tester/second。
假设有2个不同版本的test类,在first和second目录中,那当运行java Test的时候,由于java按照顺序查找,它会先去first目录查找,并且找到test类了,它不会再去second目录中查找了。
如果从first目录中删除了test类,那么会从second目录中查找该类。
当使用-jar命令行选项来运行你的程序的时候, CLASSPATH环境变量会被忽略,-cp和-classpath开关也会被忽略。这种情况下,你必须在META-INF/MANIFEST.MF中使用Class-Path attribute 设置classpath
一个常见的问题是,如果我当前的CLASSPATH变量指向当前目录“.”,在testing包中有一个class为Test,象这样的目录结构C:project estingTest.class。此时在C:project esting目录下运行命令“java Test”,会发生什么?
这个命令不会被执行,因为这会给你一个异常in thread "main" java.lang.NoClassDefFoundError: Test。因为类名不是Test,而是 testing.Test ,尽管classpath被设置到当前目录。
如果在C:project esting目录下,运行命令java testing.Test,也会抛出异常 in thread "main" java.lang.NoClassDefFoundError: testing/Test
因为它会在当前目录"."开始寻找在testing包中名字为Test的类,但是找不到,因为在C:project esting之后没有testing这样的路径。
要运行成功,必须在C:project目录下,运行C:project>java testing.Test ,才会成功。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11