问题引入
今天因为把Tomcat的版本从8升级到了9,而Tomcat9版本需要java8及其以上的版本,于是又开始了各种环境变量,Tomcat服务,开发工具的jre路径修改。记得初学java的时候,老师告诉我们需要配置java运行环境,其大致的步骤如下:
-
打开如下界面
2. 添加系统变量Java_Home,其值为你JDK的安装目录,有读者可以看到我填入Path中的并不是JDK下的bin目录,而单纯就是JDK下的目录。那么,只填入JDK的安装目录就行了吗?如果填写 为%Java_Home%\bin,情况又有什么不同吗?
解答这个问题的答案之前,我们先来理一理:JDK与JRE的关系是什么,他们各自的作用又是什么
答:
- 其实这个问题被回答了无数遍,也回答的烂了,这里我用通俗的话和读者们说一下,从字面意思看JDK(Java Development Tools,Java 开发工具包),JRE(Java RunTime Environment,Java运行时环境)。在我们下载好一个JDK后,你会发现JDK文件夹里有一个JRE,如图:
即我们下载了一个JDK之后,JRE也在JDK文件夹之中,从广义的范围可以说,JDK是包含JRE的,从狭义的范围说,JRE又是可以独立于JDK的,这样说的理由,即是我需要回到的第二个问题
2. 大家都知道,JRE里面有个东西叫做JVM(java虚拟机),市面上讲解JVM原理的书籍有很多了吧,这里我只想说大体上的流程,JVM是用来运行java字节码文件的,然后将这个后缀为.class的字节码文件转化为你计算机所能识别的机器指令,也即二进制数据。这也就是Java语言与平台无关性的特点体现,只要你的计算机上装了有了JVM,就能执行Java程序,这样说没毛病吧,各位同志们。什么,还不够通俗?各位读者,机器并不是人,它所能理解的东西无非就是01010101这些二进制数据。如果你对计算机语言的发展史有一定了解,肯定知道机器语言(二进制)——>汇编语言——>高级语言(正如我们使用的java.php,c,c++等)
jre文件夹里面的bin目录和lib目录可以看做是一个概念层的JVM,lib目录下是JVM运行java程序的jar包,是为JVM运行时候用的。包括所有的标准类库,和扩展类。 bin目录就有点意思了,它其实有JDK目录下的java.exe等可执行文件,但里面更多的是一些动态链接库文件(后缀为.dll),这些文件就是JVM运行时用来访问操作系统的。
问题解决
理解了上面的概念,我们接着来回答最初的问题。java环境变量的配置,这里我们首先要理解window操作系统下的两个概念
- 用户环境变量
顾名思义,及专属于某个用户的变量,只对当前用户有用,其他用户无权使用
- 系统环境变量
同理,整个系统的变量,所有属于这个系统的用户,都共享这个变量
网上有个很好的解释:
用户变量和系统变量的区别在于权限和实例。权限可能比较好理解,实例就是这样的意思:假设你买了一辆宝马,你太太也想开这辆车,不过你们俩身材是有差别的,在座椅高度、反光镜位置都需要调整,那么不如准备两套用户变量,记录你们俩使用上的差异,然后开车的时候(用户登录)的时候,自动调出已经调整好的一堆变量,就可以使用了。系统变量则不同,任何时候都只有一套,不会随用户登录状况发生变化。
为什么要使用环境变量
答案很简单,计算机在执行某个命令时,需要去找这个命令所在的位置,从哪里找呢,答案当然是从用户环境变量和系统环境变量里找,这些变量存储了命令所在的位置。回过头去看看上面的第一张图吧,需要你填的就是变量名和变量值!
那么什么又是命令呢,我想聪明的你,肯定在cmd中使用过services.msc(查看服务),regedit(查看注册表)、calc(打开科学计算器)等命令吧。所谓命令,其实质不过就是各种类型的文件,xxx.exe,xxx.bat,xxx.msc。这些文件有些是可以直接用编辑器打开的,有些直接是二进制的可执行文件。下面来两张图告诉我们,这些“命令”,其实一点也不神奇!
cmd下,通过where可以找到这个命令所在的位置
我们看到大多数的命令都存在于System32\目录下,我们打开看一看
内容太多,这里只截取一部分
这里顺便唠叨一下,如果读者有了解过Linux操作系统,肯定对Linux下的命令不会陌生了,和Windows一下,Linux操作系统的命令,也是一个个不同类型的文件,如图
相信看到这里,聪明的你,一定明白为什么要配置java的环境变量了
配置场景
- 不使用像Eclipse或者IDEA等集成开发工具
这种情况,开发者使用命令行的形式来编译并执行java程序,在用户变量或者系统变量请选择一处填写Path=“%Java_Home%\bin”,强迫症患者请随意。
2. 使用需要JVM支持才能运行的程序,如Tomcat Web服务器,各种集成开发工具,请一定一定把Path=“%Java_Home%\bin”配置到系统环境变量,因为这些程序默认从系统环境变量去找JVM的所在之处!!!
小结
读者看到这里,也许你已经对JDK,JRE有一些更深的理解了,又或许你还有些地方存有疑惑。不过,我相信聪明的你们,这些小问题,是难不倒你们滴。