path、classpath理解
path、classpath最常见的场景:环境变量配置
path环境变量:设置path的作用是让操作系统可以找到JDK命令(指定了JDK命令搜索路径);path环境变量原来Windows里面就有,只需修改一下,使他指向JDK的bin目录,这样在控制台下面编译、执行程序时就可以直接使用java、javac命令了;
classpath环境变量:告诉类装载器到哪里去寻找第三方提供的类和用户定义的类。JVM和其他JDK工具通过依次搜索平台库,扩展库,和类路径来查找类。
最通俗可以这样理解:path是操作系统用 ,classpath是java编译器用。
classpath第二个常见:DOS下执行java代码的编译、执行
假设你要编译的类文件名叫:HelloWorld.java,其完全路径为:D:/java/HelloWorld.java。但你所在的当前目录是:C:/Documents and Settings/peng>。如果想在这里执行编译,会有什么结果呢?
(1).C:/Documents and Settings/peng> javac HelloWorld.java 这时编译器会给出如下的错误提示信息:
error: cannot read: HelloWorld.java
这是因为默认情况下javac是在当前目录下查找类文件,很明显这个路径不是我们存放类文件的地方,所以就会报错了
(2).C:/Documents and Settings/peng>javac D:/java/HelloWorld.java
这时编译成功。
所以,只要你执行javac命令的目录不是类文件存放的目录,你就必须在javac命令中显式地指定类文件的路径。
如上两种情况下,classpath就是存放.class等编译后文件的路径。
第一种情况下,如果我们可以把HelloWorld.java所在的路径,设置为classpath,则可以执行成功;
第二种情况下,我们采用了绝对路径,指定.class编译文件路径,编译成功;
但是,如果执行编译、运行java程序时,它引用了第三方的jar包,DOS下执行,就需要-classpath来引入第三方jar或类;
案例:
java -classpath 第三方包路径 XXX
结论:
(1).何时需要使用-classpath:当你要编译或执行的类引用了其它的类,但被引用类的.class文件不在当前目录下时,就需要通过-classpath来引入类
(2).何时需要指定路径:当你要编译的类所在的目录和你执行javac命令的目录不是同一个目录时,就需要指定源文件的路径(CLASSPATH是用来指定.class路径的,不是用来指定.java文件的路径的)
Eclipse下创建一个普通java工程,默认会创建两个个文件:.classpath、.project
.project是项目文件,项目的结构都在其中定义,比如lib的位置,src的位置,classes的位置
.classpath的位置定义了你这个项目在编译时所使用的$CLASSPATH
如果创建的是一个maven工程,则通过pom.xml定义项目编译时需要使用的第三方jar或类
参考:
http://blog.csdn.net/cheney521/article/details/8672066
http://blog.csdn.net/ghost_t/article/details/5782999
http://casheen.iteye.com/blog/540385