昨天电脑重装了系统,jdk需要重新进行环境变量的配置,但是却遇到了比较奇葩的问
题,当环境变量配置好之后,在CMD中做测试时,java与java -version都正常,但是javac却报
出“不是内部或外部命令,也不是可运行的程序或批处理文件”的错误,找了一天的问题,最后
还是在网上找到了解决办法,所以在这里只是做下记录。以防以后再遇到这样的问题。
PATH,变量值是jdk文件夹下的bin目录的绝对路径,PATH变量如果没有,要新建一
个,否则可能会出问题,注意是jdk下的,还要注意是在用户变量中,我就死在了这里,以后
要注意。
1、classpath:变量
值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar,注意:在
开头位置有一个点和分号。
classpath的作用:使java执行环境能够找到指定的Java程序对应的class文件以及程序中引用
的其他class文件。
开头的点的作用:使JDK到当前工作目录下以及JDK的lib目录下寻找所需的class文件,也就是
说,如果class文件已经在%JAVA_HOME%\lib目录下,即便没设置classpath,程序也能正常
执行,但在正常开发中,项目的class文件都在项目路径下,所以要配置classpath。
2、PATH:变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(path中新添加的变量最好
放在path最前面)
PATH作用:指定命令搜索路径,比如执行javac编译java程序时,它会到PATH变量所指定的路
径中查找看是否能找到相应的命令程序。 之所以把jdk安装目录下的bin目录增加到现有PATH
变量中,是因为bin目录中包含可执行文件javac/java等,设置PATH变量后,就可以在任何目
录下执行javac/java等工具了。
3、JAVA_HOME:变量值:%JAVA_HOME%
JAVA_HOME的作用:
(1)它指向jdk的安装目录,Eclipse/Tomcat等软件就是通过JAVA_HOME来找到并使用安装
好的jdk。
(2)如果使用maven的话,JAVA_HOME就必须配置了,因为maven会到JAVA_HOME路径下
查找java的初始化配置。这里如果不配置,maven将不能正常使用,在进行maven配置测试的
时候,会报出找不到JAVA_HOME的错误。
(3)单独设置成一个变量,也可以方便以后的管理,比如:当同时设置多给版本的jdk的时
候,就可以建立多个JAVA_HOME,然后通过JAVA_HOME*来统一管理我们想使用的角jdk版
本,举个例子:我们在系统中安装了jdk8和jdk9两个版本的jdk,我们就可以在系统变量中定义
三个JAVA_HOME:
JAVA_HOME8:变量值为jdk8的路径,
JAVA_HOME9:变量值为jdk8的路径,
JAVA_HOME:变量值为%JAVA_HOME8%或%JAVA_HOME9%。
当我们想换jdk版本使用的时候,通过改变JAVA_HOME的变量值,就可以只改变
JAVA_HOME的值就可以改变jdk版本了。
用户变量:(可以不配置)
PATH:jdk文件夹下的bin目录的绝对路径,也就是 %JAVA_HOME%\lib 的路径写法
系统变量:
classpath:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
path:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
JAVA_HOME:jdk的根目录
在一台电脑山同时存在多个版本的jdk,就可能遇到这样的问题:环境变量中的
JAVA_HOME切换到另一个jdk,path路径的指向也就切换到另一个jdk,但是在CMD中的java -
version测试版本没有改变。
针对这个问题,网上有很多的解决办法,
1、把path中的 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 放到 %SystemRoot%\system32;
前面;
2、删除 C:\Windows\System32 路径下的 java.exe、javaw.exe、javaws.exe 三个文件;
这些方法确实可以解决一部分问题,但有的时候这些办法并不能起到作用,jdk在安装
的时候,会在path的最前面创建两个目录
C:\Program Files(x86)\Common\Files\Oracle\Java\javapath
和 C:\ProgramData\Oracle\Java\javapath ,(好像是1.8版本以后才会有),进到这两个目录
中会发现,这两个目录中都有 java.exe、javaw.exe、javaws.exe 这三个文件,如果你的path
中有这两个路径,将这两个路径中的三个文件也要删掉。
之所以这样做的原因是因为系统在读取path中的地址时,是从前向后读取的,并且path
中配置的路径优先级要高于JAVA_HOME的配置,由于path中配置的路径中的 java.exe、
javaw.exe、javaws.exe 存在,使JAVA_HOME配置不起作用,所以将这三个文件删掉,系统在
这些路径中找不到这三个文件,就会到我们的JAVA_HOME配置的路径中查找,也就解决了切
换jdk版本,但java -version不改变的问题。
建议:最好将path中的 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 放在最前面。
哈哈,写完了,作者的水平有限,如果有错的地方,希望读者朋友能够指正,感谢。