前言
不知道有多少同学跟我一样,配置Java环境变量的时候总是直接照搬网上的模板,却对为什么要这么配置不求甚解,今天闲来无事,便想稍微弄清一下各个参数的作用以及要不要这样配置。
一、Java相关的三个常见环境变量
Java相关的三个常见环境变量分别是JAVA_HOME、CLASSPATH、PATH,下面我们对这三个环境变量的作用分别进行解释。
1.JAVA_HOME
JAVA_HOME指明了JAVA运行环境的安装路径。它和JAVA之间,除了字面相似度高外,没有什么联系。之所以配置该变量大约有三点原因:
(1)方便CLASSPATH和PATH这两个变量的配置;
(2)便于升级JAVA,升级时,只需要将该变量指向新版本的JAVA安装目录即可;
(3)某些应用依赖于该变量,比如常用的Web容器Tomcat,以及IDE开发软件Eclipse等。
如果确定没有应用依赖该变量,甚至可以不配置,但基于前两个优点,一般不建议这么做。
2.CLASSPATH
CLASSPATH设置的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序所需要的类或者包。配置CLASSPATH的四种方式如下:
(1)不采取任何方式,那么ClassPath的默认配值为‘.’,表示类路径为当前目录及其子目录;
(2)使用环境变量配置CLASSPATH,设置后会覆盖默认配置;
(3)使用命令行参数-classpath或-cp设置,设置后会覆盖环境变量配置和默认配置;
(4)如果运行含有manifest文件的可执行jar包,那么manifest文件设置的类路径会覆盖前三种配置。
3.PATH
PATH指定一个路径列表,用于搜索可执行文件的。执行一个可执行文件时,如果该文件不能在当前路径下找到,则依次寻找 PATH 中的每一个路径,直至找到。或者找完 PATH 中的路径也不能找到,则报错。Java 的编译命令 (javac),执行命令 (java) 和一些工具命令 (javadoc, jdb 等) 都在其安装路径下的 bin 目录中。因此我们应该将该路径添加到 PATH 变量中。
二、浅谈网上最常见的一种配置方法
JAVA_HOME : C:\Program Files\Java\jdk1.8.0_112
CLASSPATH : .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
PATH : %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
JAVA_HOME这个变量的配置没什么好说的,配置成自己的JDK安装目录即可。
CLASSPATH这个变量的配置在我看来颇有争议。我搜索出来的JDK1.8安装教程在环境变量配置基本上都是千篇一律,全部包含上述三个环境变量的配置。但问题是CLASSPATH这个变量我们现在还需不需要配置呢?我认为JDK1.6以后的版本应该都是不需要的,而且也不建议去配。不建议的原因如下:
(1)现在的应用基本上不需要设置CLASSPATH,尤其是指向tools.jar 和rt.jar,只要能够找到jre,系统自动会找到这些jre自带的classpath,除非你人为地把这些jar文件移动到其他地方去了;
(2)有些应用程序的启动程序或者启动脚本会自己设置CLASSPATH,如果系统原来有CLASSPATH,反而会造成混淆;
(3)CLASSPATH太多也导致搜索和装载class的速度减慢,因为loadclass的时候,ClassLoader会从整个CLASSPATH里面寻找;
(4)配置CLASSPATH不利于应用的安装部署,一旦运行环境发生变化(如系统升级或者加入新的jar包)经常因手工设置的CLASSPATH不对而造成问题,尤其是跨平台部署的时候,CLASSPATH的目录分隔符都不一样的。
大家也可以自行搜索“CLASSPATH需不需要配置”这个话题,能够看到更多相关的解释。
PATH的配置我觉得应该分情况讨论,如果你纯粹地只是安装了JDK,那么这么配置是没错的,但如果在安装JDK的同时安装了JRE,那么%JAVA_HOME%\jre\bin就有些多余了。因为安装JRE的时候安装程序自动帮你把 JRE的 java.exe 添加到了系统变量中。验证的方法也很简单,大家看到系统环境变量的 path最前面有“%SystemRoot%\system32;%SystemRoot%;” 这样的配置,那么再去Windows/system32下面去看看吧,发现了什么?有一个 java.exe。这种情况下,即使你配置了%JAVA_HOME%\jre\bin,使用的也仍然是C:\Program Files\Java\jre1.8.0_112\bin,而不是C:\Program Files\Java\jdk1.8.0_112\jre\bin,除非手动把%JAVA_HOME%\jre\bin挪到system32变量前面,不过若非必要,建议大家不要这么做,这么做也会导致path变量的值变成很长的一串字符串,而不是列表展示了。
三、总结
经过多方查阅资料,我认为JDK1.6以后版本的安装只需配置如下变量即可(同时安装了JRE):
JAVA_HOME : C:\Program Files\Java\jdk1.8.0_112
PATH : %JAVA_HOME%\bin
参考链接
https://www.jianshu.com/p/a9d1147e3ceb
https://blog.csdn.net/weixin_30121389/article/details/114566490
https://www.cnblogs.com/byx1024/p/12345126.html