java开发为什么要设置环境变量path,class path,java_home

来源:互联网 发布:中国电信4g是什么网络 编辑:程序博客网 时间:2024/06/05 21:12

在学习JAVA的过程中,涉及到多个环境变量(environment variable)的概念,如PATH。正确地配置这些环境变量,是能够顺利学习、开发的前提。而我出现的问题是:目前拿到一台新电脑能够按照提示一步一步地正确配置,但时间一长就忘了,出现了问题也无从下手。为什么呢,还是对这些概念没有理解,知其然但不知其所以然。看了别人的资料自己再总结一下
1. 基本原理
变量:可以随意对其赋值的存储单元。
环境: 首先,你把操作系统当做是一个最大的软件,其它软件如 Office、LOL、JVM等等都是运行在这个软件之内的小软件。 那么,环境 就是操作系统这个软件。
环境变量:合起来就是操作系统的变量,就是全局变量。
作用:变量在任何程序中的作用都是 被赋值/被使用!这个全局变量操作系统可以使用,其内的小软件也可以使用!
2. 环境变量的样子
其实环境变量和普通的变量没什么区别也是xxx = xxx这种样式。
以下图片是windows 10中的样子
这是在windows10中
当然,Windows是视窗系统,这里没有显式的给XXX=XXX这种方式,而是直接可以点击【编辑】操作。
JAVA的初学者,必须要学会配置PATH环境变量,否则无法编译、运行JAVA程序。那么,为什么要配置PATH环境变量呢?PATH环境变量是做什么的呢?我们从一个常见的问题入手。
当我们安装好JAVA后,若没有正确配置PATH环境变量,则在命令行窗口(开始->运行->输入cmd,回车)下运行命令java -version(显示JAVA的版本)命令时,会出现如下的错误提示信息:
这里写图片描述
这条错误信息的意思是,你要求运行的“java”这条命令我不认识,不知道是个什么玩意儿。那么究竟这个“java”命令是何方神圣呢?在JDK的安装目录下(我的是D:\Java\jdk1.6.0_24),有一个bin目录。打开此目录,会发现大量的可执行文件(后缀名为exe的文件。Windows默认隐藏文件后缀名。要显示后缀名,可在当前窗口上方菜单栏里点“工具”菜单->文件夹选项->查看->高级设置->清除“隐藏已知文件类型的扩展名”前面的钩钩->确定) 。其中有一个可执行文件即为java.exe。现在在命令行窗口下把当前目录切换到这个bin目录下。通过如下命令实现:
这里写图片描述
在此目录下,运行dir命令,显示当前目录下的所有文件和目录。从显示结果中,我们可以清楚地看到“java.exe”这个文件。如下图所示:
这里写图片描述
实际上我们执行“java”命令,就是要运行“java.exe”这个可执行文件(我们运行其他命令,本质上也是要执行某个程序文件)。我们现在再来执行“java -version”这条命令试试。在命令行窗口下键入java -version,回车,结果如下图所示:
这里写图片描述
看来这次执行成功了。命令结果显示当前JAVA的版本是“1.6.0_24”。执行java -?可查看此命令的帮助信息。可以看到它有很多选项,-version只是其中之一。另外一种方式是,写出这些可执行文件的完整(绝对)路径(例如:d:\Java\jdk1.6.0_24\bin\java -version),就可以在任何目录下执行了。读者可自行尝试。
与java命令类似,javac命令目前也能在bin目录下执行,但到其他目录下就只能写出其完整路径了。在学习JAVA的过程中,我们经常需要使用javac和java这两条命令来编译、运行我们的JAVA程序。难道我们每次运行这两条命令都要先切换到bin目录下吗或写出一长串的绝对路径吗?能不能有一个办法,让我们能够在任何目录下都能自如地运行这些命令呢?
解决的办法就在于PATH环境变量。
PATH是路径的意思,PATH环境变量中存放的值,就是一连串的路径。不同的路径之间,用英文的分号(;)分隔开。系统执行用户命令时,若用户未给出绝对路径,则首先在当前目录下寻找相应的可执行文件、批处理文件(另外一种可以执行的文件)等。若找不到,再依次在PATH保存的这些路径中寻找相应的可执行的程序文件。
右击桌面“我的电脑”图标->属性->高级->环境变量,就打开了了设置环境变量的对话框。上面部分是为某个用户设置。Windows设计为可多用户使用一台机器,每人一个账户。为某个账户设置的变量只对该用户有效。下面部分是设置系统变量,对系统中的每个用户有效。现在一般电脑都只有一个用户,即Administrator。因此只需要为此账户设置即可。找到PATH环境变量,点“编辑”。在“变量值”框内现有值的后面输入英文输入法的分号,然后添加你想添加的值(在这里是D:\Java\jdk1.6.0_24\bin)。一路确定,OK!
现在再打开一个命令行窗口,输入echo %path%命令查看path的值(或者直接使用path命令亦可)。现在,我们可以看到bin目录已被添加到PATH中,再在任何目录下运行java -version命令,均可成功。如下图所示:
这里写图片描述
其实我们执行其他命令都是这个原理。举例来说,当你显示PATH的值时,你会发现第一个值是C:\WINDOWS\system32。在Windows下打开这个目录,你会看到很多可执行文件,它们的名字与我们常用的命令的名字是一致的。也就是说,我们执行这些命令,实际上系统就是根据PATH的这个值找到了相应的可执行文件,再运行这些文件的结果.

常见的Java相关环境变量与作用

PATH

这个其实是操作系统用的,用来指定操作系统需要使用到的程序的位置。对于Java来说,通常需要把JDK的bin目录添加进入PATH中,这样你就可以在任意目录下使用bin下面的javac.exe、java.exe等。

这个变量一定要保证将JRE/JDK的bin纳入其中(这里我说的其实不严谨,你可以把javaw.exe等这类文件复制一份放到任意一个PATH路径下,不一定是JRE/JDK也行),这样很多Java程序才能启动,比如Eclipse。

JAVA_HOME

JAVA_HOME是一个约定,通常它指的是JDK的目录。如果需要JDK的话,大部分程序会默认去环境变量中取JAVA_HOME这个变量。

比如,Tomcat的.bat/.sh文件中就会默认去取JAVA_HOME来用。
所以,这个变量最需要设置。设置它,可保你万无一失,一生平安……

JRE_HOME

同样,这也是一个约定的变量,通常指JRE目录。其实大部分Java程序不需要JDK,而是只需要其子集JRE,所以很多程序也会去取这个变量来用。

例如,Tomcat中某些.bat文件中这样说到:

rem   JAVA_HOME       Must point at your Java Development Kit installation.rem                   Using JRE_HOME instead works as well.remrem   JRE_HOME        Must point at your Java Runtime installation.rem                   Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOMErem                   are both set, JRE_HOME is used.

大意就是:Tomcat去取这俩变量,只要任意一个不为空就行,都不为空就用JRE_HOME了。因为Tomcat不需要JDK中的工具,它只是运行Java程序而已。

这个变量如果你明确知道应用程序只需要设置这个就行(比如上面Tomcat的注释),那么它可以代替JAVA_HOME,且最好就用这个。

CLASSPATH

基本上,这个变量指的是:由AppClassLoader加载的class路径。(这个涉及到Java的类加载机制,大家先去了解一下然后就会明白了)。

这个变量就跟所有Java写的程序有关了,不光其它Java程序会用到(比如Tomcat在某些情况下会用),我们写的Java程序也能用到了。但其实……,如果你用Eclipse的话你还是只需要点击点击BuildPath就行了,还是没有让你显式的用XXX=XXX这种方式。不过如果你用Command Line来运行Java程序的话通常就会用到set CLASSPATH了。

可以在Java程序中用代码获取到当前CLASSPATH的内容,像这样:

System.getProperty(“java.class.path”)
//输出是String内容是你项目的class文件的根目录 + 你引用的jar包们的地址。类似这样

System.getProperty("java.class.path")//输出是String内容是你项目的class文件的根目录 + 你引用的jar包们的地址。类似这样E:\test1\target\classes;E:\Java\Program Files\.m2\repository\mysql\mysql-connector-java\5.1.38\mysql-connector-java-5.1.38.jar...

所以,这个变量在使用IDE进行开发的情况下,通常不需要手动设置,只需要按常规IDE使用步骤(比如Build Path)IDE会帮你做。

CATALINA_HOME
这是Tomcat用的。叫CATALINA这个名字我猜是因为Tomcat默认服务(也就标签)的名字就是CATALINA。当然,不管是不是其实不重要,毕竟变量的名字可以随意起(但最好见名知意),重要的是它存什么值。它的值代表当前tomat根目录,比如:E:\apache-tomcat-7.0.55。

这个变量,只有在你把.bat/.sh等用来启动Tomcat的文件移动位置了(就是不在原来的tomcat\bin下面了)时才需要指定。
具体场景,比如说在Linux中你将catalina.sh复制到/etc/rc.d/init.d/下做自启动service时就需要设置。

总结如下:

  1. 需要在操作系统下设置的变量:

PATH中包含JRE/JDK的bin目录;
JAVA_HOME或者JRE_HOME。都设也可以,偷懒就只设 JAVA_HOME就可以。
2. 很少需要设置的:
CLASSPATH、CATALINA_HOME

0 0
原创粉丝点击