jdk的环境变量配置及多个版本并存,java -version不改变的问题

昨天电脑重装了系统,jdk需要重新进行环境变量的配置,但是却遇到了比较奇葩的问

题,当环境变量配置好之后,在CMD中做测试时,java与java -version都正常,但是javac却报

出“不是内部或外部命令,也不是可运行的程序或批处理文件”的错误,找了一天的问题,最后

还是在网上找到了解决办法,所以在这里只是做下记录。以防以后再遇到这样的问题。

第一部分:jdk环境变量的配置:

一、在用户变量中有一个变量:(可以不配置,在这的配置只针对当前

的用户有用)

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版本了。

总结一下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版本切换的问题:

在一台电脑山同时存在多个版本的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; 放在最前面。

哈哈,写完了,作者的水平有限,如果有错的地方,希望读者朋友能够指正,感谢。

你可能感兴趣的:(jdk)