1. 环境变量
环境变量顾名思义,就是指在系统<small>(Window / Linux)</small>环境中存在着的变量。
逻辑上,「环境变量」类似于编程领域中的全局变量的概念,只不过,这个「全局」是一个更大的全局,是操作系统层面的全局。
理论上,<small>(不考虑访问权限问题)</small>,任何一个程序/进程,如果有需要,都能看得到、访问到这些“全局变量”。
系统中有一些自带的、默认存在的环境变量,通常情况下「不要改变这些系统自带的环境变量的值」,特别是不要删除<small>(不要删除、不要删除)</small>它们的原值。
如果有需要,你也可以为你的系统添加新的环境变量。
2. PATH 环境变量
PATH 是操作系统中的环境变量之一,它是系统自带的环境变量。
在使用操作系统过程中,你会在控制台/终端输入命令。每一个命令的背后都有一个与之对应的可执行程序,在 Windows 上就是 .exe 和 .bat 这样的可执行程序。
<small>上面这句话中的「每个」和「都有」,不是 100% 正确,但是绝大多数情况下都是如此。这就是「内部命令」和「外部命令」的区别,这里不扩展讲解。</small>
那么,一个很显而易见的问题来了:操作系统如何知道这些命令「背后」的执行程序在哪?它怎么知道去哪里找这些可执行程序?
操作系统靠 PATH 环境变量。PATH 环境变量的值,是多个目录的路径。<small>在 Win 10 中,这些路径每一个都是独行展示;在 Win 7 中这些路径名是以 ;
作为分隔符来连在一起,写作一行。</small>
当「你」输入了一个命令,要求操作系统去执行某项操作时,操作系统会去 PATH 的这些目录下挨个查找是否有与命令同名的可执行程序。有,则执行;没有,则会报错。
3. Java 环境变量
当你要进行 Java 编程,或者是运行 Java 程序时,你会直接或间接使用到 javac 和 java 命令。
当你安装了 JDK 之后<small>(假定你没有自定义安装路径,使用的是默认路径)</small>,你所安装的 JDK 的路径 C:\Program Files\Java\jdk1.8.0_201 下的 bin 目录下会存在 javac.exe 和 java.exe 这样一批可执行程序。
但是问题是:当你输入 javac 或 java 命令时,Windows 不知道到这个 bin 目录下找 .exe 可执行程序!
因此,在安装完 JDK 之后,你需要将这个装有 javac 和 java<small>(还有其他的命令的对应的执行程序)</small>的 bin 目录「告诉」给 Windows 。以便于,让它知道要到这个目录下找可执行文件。
因此,我们需要将 C:\Program Files\Java\jdk1.8.0_201\bin 目录添加<small>(添加、添加,不要删除 PATH 的原值)</small>到环境变量 PATH 中。
4. JAVA_HOME 环境变量
有一些依赖于 Java 开发/运行环境的软件<small>(例如 Tomcat)</small>在运行时有一个前提条件:它会要求系统的环境变量中存在一个名为 JAVA_HOME 的环境变量,<small>先估且不谈这个环境变量的值是什么,</small>如果这个环境变量如果不存在,那么这些软件就会直接运行失败。
这个「前提条件」是这些依赖于 Java 开发/运行环境的软件自身硬编码定死的,「你」作为这些软件的使用者无法更改这一点,只能遵守它,满足这个前提条件。
因此,为了能正常使用这些依赖于 Java 开发/运行环境的软件,我们必须确保操作系统的环境变量中存在一个名为 JAVA_HOME 的环境变量。如果没有,必须添加它 。
JAVA_HOME 这个环境变量的值,应该是你的 JDK 的安装路径。例如:C:\Program Files\Java\jdk1.8.0_201
。注意,这不是上面说的那个 bin 目录,而是 bin 目录的上一级目录。
本质上,就是因为这些软件在运行中要使用这个目录下的东西。所以,它们要求你通过一个名为 JAVA_HOME 环境变量来告知它们这个目录在哪。
5. JAVA_HOME 的一个副作用
本来,JAVA_HOME 环境变量和 PATH 环境变量是没有直接关系的。
但是,“碰巧” 的是我们添加到 PATH 中的指明 .exe 文件所在地的 C:\Program Files\Java\jdk1.8.0_201\bin 中的前一段不正好就是 JAVA_HOME 吗?!
因此,我们可以在 PATH 中利用 JAVA_HOME。反正,你用或者不用,JAVA_HOME 都是存在着的。最后,我们在 PATH 中添加的内容,就可以「简化」成:%JAVA_HOME%/bin 。
6. 一个小技巧
Windows 操作系统有一个 where 命令,Linux 操作系统有一个 which 命令,它们都能告诉你:你要执行的命令「背后」的可执行程序在哪里。
以 Windows 为例:
where javac
如果 where 命令有正常的输出结果,那么就意味着操作系统能找得到命令「背后」的那个可执行程序,那么该命令自然可以正常使用。
网友评论