path和classpath的区别

时间: 作者:走吧走吧

内部命令和外部命令

操作系统的命令通常分为内部命令和外部命令,内部命令常驻内存,而外部命令是一条单独的可执行文件。
内部命令在任何时候都可以使用;外部命令是一个个单独的可执行文件,存放于磁盘。外部命令需要保证命令文件在当前的目录中,或已经被加载了路径。
(wisdows下)内部命令的例子:dir/cd/md/del等
外部命令的例子:java/javac等

path和classpath

path和classpath都是系统变量。
path 存放外部命令的搜索路径
classpath 存放类资源位置的搜索路径。

path里写java.exe的路径、javac.exe的路径(其他安装的可执行文件路径)。
classpath里写jdk类库的路径。    

详解

  • path,这个是给windows操作系统用的,告诉命令行里,执行的命令行工具在那里,比如java,javac这都是命令行工具,你在运行里随便敲一个命令,操作系统怎么就知道你这个命令对应的程序在什么地方,就是通过PATH知道的,你编写JAVA程序的时候,需要编译你的代码,执行编译后的代码,用java和javac这两个工具,那么就必须告诉操作系统,这两个工具放在什么地方。
    windows提供了一个path环境变量,它的作用就是先在这个变量的值路径中去找,如果找到了要运行的exe就运行,否则失败。
  • JAVA_HOME,是声明一个简写。主要存放javac和java具体位置的路径,因为你安装java的路径可能比较长,不方便在path里面写,所以就等于是声明一个简写。然后在path里面引用JAVA_HOME,用相对路径。
    eg:你的jdk安装路径为
    D:\Java\jdk1.5.0_05
    那么
    JAVA_HOME = D:\Java\jdk1.5.0_05;
    path = :%JAVA_HOME%\bin;
  • CLASSPATH,描述了Java虚拟机在运行一个Class时在哪些路径中加载要运行的类以及运行的类要用到的类。简单的说,就是像操作系统的path,只不过这个classpath是由Java的虚拟机来使用查找需要加载的类,而操作系统的path是由操作系统用来查找用户输入的可执行程序。
    Classpath的顺序和类版本冲突
    Java虚拟机在加载类的时候查找classpath是有顺序的,如果在classpath中有多个条目都有同一个名称的类,那么在较前位置的类会被加载,后面的会被忽略。这种按照顺序的类加载可能会导致类的版本冲突。例如classpath=c:\servlet2.2\servlet.jar;c:\servlet2.3\servlet.jar,那么在实际应用的过程中,你使用的是servlet2.3,而不是servlet2.2。很多时候如果不注意这一点,可能会导致奇怪的异常。

例子–关于配置环境变量

java

1.新建JAVA_HOME变量。
变量值填写jdk的安装目录(例如E:\Java\jdk1.7.0)
2.修改Path变量
在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
3.新建CLASSPATH变量
变量值填写 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)

maven

1.新建环境变量MAVEN_HOME
把bin的位置设在环境变量里(例如E:\Program Files(x86)\apache-maven-3.0.4)
2.在PATH里加入maven的bin的路径
%MAVEN_HOME%\bin;

参考文章1
参考文章2
参考文章3