在学习Java的过程中,涉及到多个环境变量(environment variable)的概念,如PATH。正确地配置这些环境变量是能够顺利学习、开发的前提。而经常出现的问题是:有的学习者能够按照提示一步一步地正确配置,但时间一长就忘了,出现了问题也无从下手。究其原因,就是对这些概念没有理解,知其然但不知其所以然。下面的内容,就是帮助大家知其所以然。
一、基本原理
1.引例
未设置环境变量,只有在jdk中的bin目录下才可以运行java命令。
安装JDK之后,如果不配置PATH环境变量,无法编译和运行Java程序。
在命令行直接输入"java -version",会出现错误提示信息:“ 'java'不是内部或外部命令,也不是可运行程序或批处理文件 ”
这条错误信息的意思是:你要求运行的“java”这条命令我不认识,不知道是个什么玩意儿。
那当我们打开JDK的安装目录下bin目录,在此目录下运行”dir“命令显示该目录下全部文件,即可发现java.exe
该目录下再次运行"java -version",命令运行成功并显示java版本信息。
2.问题提出
只有写出java.exe的完整路径才能运行java命令?
与java命令类似,javac命令目前也能在bin目录下执行,但到其他目录下就只能写出其完整路径了。在学习Java的过程中,我们经常需要使用javac和java这两条命令来编译、运行我们的JAVA程序。难道我们每次运行这两条命令都要先切换到bin目录下吗或写出一长串的绝对路径吗?能不能有一个办法,让我们能够在任何目录下都能自如地运行这些命令呢?
3.解决方法
解决的办法就在于PATH环境变量。
PATH是路径的意思,PATH环境变量中存放的值,就是一连串的路径。不同的路径之间,用英文的分号(;)分隔开。系统执行用户命令时,若用户未给出绝对路径,则首先在当前目录下寻找相应的可执行文件、批处理文件(另外一种可以执行的文件)等。若找不到,再依次在PATH保存的这些路径中寻找相应的可执行的程序文件。系统就以第一次找到的为准;若搜寻完PATH保存的所有路径都未找到,则会显示类似前面的错误信息。
4.设置PATH
1) 通过命令行设置
set命令设置环境变量格式:set 环境变量名 = 环境变量值
set PATH = D:\Java\jdk1.8.0_101\bin
注意:这样会使PATH只有”D:\Java\jdk1.8.0_101\bin“,其他的值就会被覆盖
因此,我们应该把值“D:\Java\jdk1.8.0_101\bin”追加到PATH中
set PATH = %PATH%;D:\Java\jdk1.8.0_101\bin
把PATH放在两个百分号之间,指把PATH原有的值取出。其后的分号表示分隔不同的路径值,之后才是我们要添加的值。
注意:这种使用set命令的方式设置的环境变量只对当前命令行窗口有效。一旦关闭此窗口,再次运行另一个命令行窗口时,PATH环境变量还是原来的值。 因此,我们必须在Windows下修改PATH环境变量。
2) 通过“属性”添加
右键点击”我的电脑“,依次选择进入”属性“->”高级系统设置“->”环境变量“,编辑PATH值,添加;D:\Java\jdk1.8.0_101\bin
//注意分号
;D:\Java\jdk1.8.0_101\bin
点击确定,添加成功
二、名词释义
我们现在启动一个命令行窗口,按上述的方法把PATH的值全部清除,然后再运行dir、cd等命令。出乎我们意料的是,它们仍然能够正确执行。这又是什么原因呢?
报告错误的信息提到了内部命令、外部命令和批处理文件,那什么使外部命令和内部命令呢?
内部命令和外部命令
内部命令和外部命令是DOS(disk operating system,微软早期基于命令行的操作系统)时代的概念,百度百科的解释是:内部命令是随每次启动的COMMAND_COM装入并常驻内存,而外部命令是一条单独的可执行文件。粗略地讲,所谓内部命令就是最核心、使用最多的命令。为了提高响应速度,系统一启动,这些命令就被加载到内存,因此可以迅速、直接地执行;而外部命令由于使用相对较少,就不预先加载到内存,当用户使用时,再到硬盘上(c:\windows\system32)找相应的可执行文件,然后加载到内存执行。像dir、cd等都是内部命令,而诸如attrib、format等都是外部命令。尽管DOS的时代早已成为了历史,但某些操作却必须在命令行模式下完成,对专业人士来说更是如此。因此,Windows产品一直保留着命令行模式这个工具。
批处理文件
另外一个概念就是批处理文件(后缀名为.bat,来源于批量的英语单词batch),它是另外一种可以执行的文件。简单地说,批处理文件包含了很多DOS命令。文件执行时,就一条一条地执行这些命令。不一定顺序执行,像通用的程序设计语言一样,它也有自己的流程控制。批处理文件创建很简单:用任何一个文本编辑器(如Windows的记事本)创建一个文本文件,然后把后缀名改为.bat即可。创建好的批处理文件,你也可以用文本编辑器打开,查看它的源代码。
三、CATALINA_HOME环境变量
博主未执行此操作,但有助于对环境变量加深理解
Tomcat是一个免费开源的Servlet/JSP容器,深受广大Java初学者喜爱。这其中需要设置CATALINA_HOME环境变量,值为tomcat安装目录(我的是d:\tomcat7),否则会出现错误信息:没有正确设置CATALINA_HOME环境变量,而此变量是运行Tomcat所必须的。
而当你不理会这个信息,在命令行窗口把当前目录切换到tomcat安装目录下的bin目录下,再执行批处理文件startup.bat来启动tomcat时,发现也可以成功。难道现在不需要CATALINA_HOME环境变量了吗?
实际上,在startup.bat中,首先判断CATALINA_HOME是否为空。若为空,就把当前目录设为CATALINA_HOME的值。然后查找CATALINA_HOME所指示的目录下是否有个bin目录,此bin目录下是否有个叫做catalina.bat的批处理文件(此文件负责启动tomcat)。若没有,则把当前目录的父目录设为CATALINA_HOME的值,再重复上述的查找。若仍失败,就报错。
因此,当你在tomcat安装目录下的bin目录下运行startup.bat文件时,它就会按照上面所说的第二种方式自动正确设置CATALINA_HOME的值,因为catalina.bat文件就在tomcat安装目录下的bin目录里。
虽然在此种情况下能正确运行,但还是建议你正确设置CATALINA_HOME环境变量。与PATH不同的是,PATH系统本身就有,而CATALINA_HOME需要你自己新建环境变量。
为了能够在任何目录下都能运行tomcat安装目录下bin目录里的批处理文件,如startup.bat,可把此目录添加到PATH环境变量中(我的是d:\tomcat7\bin)。
为了提高灵活性,可在PATH环境变量的最后添加上%catalina_home%\bin(与前一个值之间不要忘了用英文的分号隔开)。把catalina_home放置在两个百分号之间,表示引用这个环境变量的值(配置Java中JAVA_HOME环境变量同理)。这样,当你把tomcat的安装目录换了以后,就只需要修改catalina_home的值,而不需要修改PATH的值了,因为它可以自动计算出新的正确值
(适用于tomcat6/7)
———————————————————————————————————————————————
Java环境变量配置
1) 需配置3个环境变量
变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk1.8.0_101
变量名:CLASSPATH
变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
变量名:PATH
变量值:%JAVA_HOME%\bin
2) 意义
- JAVA_HOME:指明JDK的安装路径
- CLASSPATH:指明Java虚拟机要装载类的路径
- PATH:指明系统可以在任何路径下识别Java命令