热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

环境变量_Question1Java环境变量的配置及为什么要配置环境变量

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Question1Java环境变量的配置及为什么要配置环境变量相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Question1 Java环境变量的配置及为什么要配置环境变量相关的知识,希望对你有一定的参考价值。


  在学习JAVA的过程中,涉及到多个环境变量(environment variable)的概念,如PATH。正确地配置这些环境变量,是能够顺利学习、开发的前提。而经常出现的问题是:有的学习者能够按照提示一步一步地正确配置,但时间一长就忘了,出现了问题也无从下手。究其原因,就是对这些概念没有理解,知其然但不知其所以然。下面的内容,就是帮助大家知其所以然。


一、基本原理

  环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。

  环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如WindowsDOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。

     JAVA的初学者,必须要学会配置PATH环境变量,否则无法编译、运行JAVA程序。那么,为什么要配置PATH环境变量呢?PATH环境变量是做什么的呢?我们从一个常见的问题入手。

     当我们安装好JAVA后,若没有正确配置PATH环境变量,则在命令行窗口(开始->运行->输入cmd,回车)下运行命令java -version(显示JAVA的版本)命令时,会出现如下的错误提示信息:

 技术分享

  这条错误信息的意思是,你要求运行的“java”这条命令我不认识,不知道是个什么玩意儿。那么究竟这个“java”命令是何方神圣呢?在JDK的安装目录下(我的是D:\\Java\\jdk1.6.0_24),有一个bin目录。打开此目录,会发现大量的可执行文件,后缀名为exe的文件。其中有一个可执行文件即为java.exe。现在在命令行窗口下把当前目录切换到这个bin目录下(Shift+右键)。

 技术分享

  在此目录下,运行dir命令,显示当前目录下的所有文件和目录。从显示结果中,我们可以清楚地看到“java.exe”这个文件。如下图所示:

 技术分享

  实际上我们执行“java”命令,就是要运行“java.exe”这个可执行文件(我们运行其他命令,本质上也是要执行某个程序文件)。我们现在再来执行 java -version 这条命令试试。在命令行窗口下键入java -version,回车,结果如下图所示:

 技术分享

  看来这次执行成功了。执行java -?可查看此命令的帮助信息。可以看到它有很多选项,-version只是其中之一。另外一种方式是,写出这些可执行文件的完整(绝对)路径(例如:D:\\Java\\jdk1.8.0_31\\bin\\java -version),就可以在任何目录下执行了。读者可自行尝试。

     java命令类似,javac命令目前也能在bin目录下执行,但到其他目录下就只能写出其完整路径了。在学习JAVA的过程中,我们经常需要使用javacjava这两条命令来编译、运行我们的JAVA程序。难道我们每次运行这两条命令都要先切换到bin目录下吗或写出一长串的绝对路径吗?能不能有一个办法,让我们能够在任何目录下都能自如地运行这些命令呢?

  明白了这些,我们就把bin目录的完整路径添加到PATH中。在命令行窗口下,可使用set命令完成此类的任务。直接运行set,会显示系统当前所有环境变量的值,运行set /?,会显示关于此命令的帮助信息。

  使用set命令设置环境变量值的格式为:set 环境变量名=环境变量值。我们可以使用命令set path=D:\\Java\\jdk1.8.0_31\\binjava等程序文件所在的目录添加到PATH环境变量中(Windows下环境变量名不区分大小写,这与UNIX不同)。但是这样会使PATH的值只有“D:\\Java\\jdk1.8.0_31\\bin”,它预先设定供其他程序使用的值就都被覆盖了。因此,我们应该把值“D:\\Java\\jdk1.6.0_24\\bin”追加到PATH中。为此,我们可以使用如下命令:

  set path=%path%;D:\\Java\\jdk1.8.0_31\\bin

  把PATH放在两个百分号之间,指把PATH原有的值取出。其后的分号表示分隔不同的路径值,之后才是我们要添加的值。注意,请在英文输入法状态下使用此命令。现在我们转到任意一个目录下执行java -version命令试试。结果如下图所示:

 技术分享

   可见运行完全成功。但是这种使用set命令的方式设置的环境变量只对当前命令行窗口有效。一旦关闭此窗口,再次运行另一个命令行窗口时,PATH环境变量还是原来的值。因此,我们必须在Windows下修改PATH环境变量。步骤如下:

     右击桌面我的电脑图标->属性->高级->环境变量,就打开了了设置环境变量的对话框。上面部分是为某个用户设置。Windows设计为可多用户使用一台机器,每人一个账户。为某个账户设置的变量只对该用户有效。下面部分是设置系统变量,对系统中的每个用户有效。现在一般电脑都只有一个用户,即Administrator。因此只需要为此账户设置即可。找到PATH环境变量,点编辑。在变量值框内现有值的后面输入英文输入法的分号,然后添加你想添加的值(在这里是D:\\Java\\jdk1.8.0_31\\bin)。一路确定,OK

  现在再打开一个命令行窗口,输入echo %path%命令查看path的值(或者直接使用path命令亦可)。

技术分享

  现在,我们可以看到bin目录已被添加到PATH中,再在任何目录下运行java -version命令,均可成功。如下图所示:

 技术分享

  其实我们执行其他命令都是这个原理。举例来说,当你显示PATH的值时,你会发现第一个值是C:\\WINDOWS\\system32。在Windows下打开这个目录,你会看到很多可执行文件,它们的名字与我们常用的命令的名字是一致的。也就是说,我们执行这些命令,实际上系统就是根据PATH的这个值找到了相应的可执行文件,再运行这些文件的结果。如attrib.exe文件

技术分享

  它对应于attrib命令,这是显示/设置文件属性的命令,如下图所示:

 技术分享

  现在我们通过命令set path=(等号右边什么都没有,或随便写点东西)来清除PATH的值,再来运行attrib命令试试。如下图所示:

 技术分享

  可以看出,完全相同的命令,现在已无法执行而报错了。

  下面再通过命令set path=c:\\windows\\system32Windows下不区分大小写,因此windowsWINDOWS都正确),把attrib.exe文件所在的路径添加到PATH中,再运行试试。如下图所示:

 技术分享

  很显然,目前已能够正确运行。另外一个常见的例子就是format.com.com文件是另一种可以执行的文件),不过此命令是用来格式化的,实验时请小心,不要由于失误而格式化了某个盘。而且,根据上面的描述,在PATH环境变量未正确配置的时候,写出这些文件的绝对路径(完整路径),亦可以正确执行。读者可自行实验(在此声明,由于已事先提醒,因此凡是由于误操作带来的数据丢失,概不负责!)。


 二、Java环境变量配置--图文并茂版



  • win7,win8系统:右键点击桌面计算机→选择属性→选择高级系统设置→选择高级选       项卡→点击环境变量→下方系统变量中查找path→双击path

  • XP系统:右键点击桌面计算机→选择属性→选择高级选项卡→点击环境变量→下方系统变量中查找path→双击pathjdk安装目录下的bin目录添加到最左边并添加分号

 技术分享



  • path环境变量的参照形配置方式

创建新的变量名称:JAVA_HOME,为JAVA_HOME添加变量值:JDK安装目录,将path环境变量中JDK目录修改,%JAVA_HOME%\\bin;path环境变量具有先后顺序

 技术分享

我们配置成功后发现javacjava可以到处运行

 技术分享

上述摘自http://www.cnblogs.com/wkrbky/p/6351235.html


三、 classpath环境变量的作用

  如果你输入一个命令,比如java,那么系统是如何找到这个命令的呢?按照顺序,系统先在当前目录搜索是否有java.exe, java.bat 等。 如果没有,就得到系统的PATH(不区分大小写)里面查找。比如你的环境变量的PATH里面有 C:\\program files\\java\\jdk1.6\\bin,那么 系统会尝试在这个目录下面查找,并且找到了 java.exe 那么就会执行它。所以 path 就是系统为了搜索某个资源而配置的一个参数。 多个目录之间用分号(linux里面用冒号)分割。那么CLASSPATH呢? 同样的道理,当我们需要某个class时,系统会自动在CLASSPATH里面搜索,如果是jar,就自动从jar里面查找,如果是普通的目录,则在目录下面按照package进行查找。但与PATH不同的是,默认的CLASSPATH是不包含当前目录的,这也是CLASSPATH里面要包含一个点的道理了。

Tomcat下的Web应用有两个预置的classpath : WEB-INF/classes WEB-INF/lib启动项目,项目就会加载这两个目录里的数据。这是war包的规范.要改变预置的classpath比较麻烦,在Tomcat的配置文件里没有发现类似的配置,要实现自己的classloader才能达到目的。一个在tomcat中运行的web应用.它的classpath都包括如下目录:
我知道的有
%tomcat%/lib 
web-inf/lib 
web-inf/classes 
环境变量里的classpath

总结:classpath这是一个定位资源的入口.classpathlib的优先级大于classes;

上述摘自http://www.cnblogs.com/fjhh/p/5370634.html


四、 classpath的配置

  为什么要配置classpath变量?配置classpath变量,才能使得java解释器知道到哪里去找标准类库,这些标准类库是别人已经写好了的,我们只管使用。比如我们常用到java.lang包中的类,在配置classpath变量后被设为默认导入,所以在写程序时就不用import这个包了。那么这些标准类库在哪呢?在以JDKlib目录下以jar为后缀的文件中:一个是dt.jar,一个是tools.jar,这两个jar包都位于C:/jdk1.6.0/lib目录下,所以通常我们都会把这两个jar包加到我们的classpath环境变量的值为:.; C:\\Program Files\\Java\\jdk1.5.0_17\\\\lib\\tools.jar; C:\\Program Files\\Java\\jdk1.5.0_17\\\\lib\\dt.jar;
如何配置classpath变量?
在系统环境变量那一栏中点击新建classpath ,具体过程省略,下面只列出其键值对:
变量名: CLASSPATH
变量值: .;%JAVA_HOME%\\lib\\tools.jar;%JAVA_HOME%\\lib\\dt.jar;
(注意,CLASSPATH最前面是有个 “.”的,表示当前目录。用两个%包围JAVA_HOME这个变量的意思是引用变量的值,当然如果你不想这样做,也可以这样配置classpath的值为:.;%JAVA_HOME%\\lib\\tools.jar;%JAVA_HOME%\\lib\\dt.jar; 也就是用JAVA_HOME变量的值替换%JAVA_HOME%;

技术分享


、内部命令、外部命令和批处理文件

     我们现在启动一个命令行窗口,按上述的方法把PATH的值全部清除,然后再运行dircd等命令。出乎我们意料的是,它们仍然能够正确执行。这,又是什么原因呢?

     我们来看看刚才那些报告错误的信息,它们都提到了内部命令外部命令的概念。那么什么是内部命令和外部命令呢?

     内部命令和外部命令是DOSdisk operating system,微软早期基于命令行的操作系统)时代的概念,百度百科的解释是:内部命令是随每次启动的COMMAND_COM装入并常驻内存,而外部命令是一条单独的可执行文件。粗略地讲,所谓内部命令就是最核心、使用最多的命令。为了提高响应速度,系统一启动,这些命令就被加载到内存,因此可以迅速、直接地执行;而外部命令由于使用相对较少,就不预先加载到内存,当用户使用时,再到硬盘上(c:\\windows\\system32)找相应的可执行文件,然后加载到内存执行。像dircd等都是内部命令,而诸如attribformat等都是外部命令。尽管DOS的时代早已成为了历史,但某些操作却必须在命令行模式下完成,对专业人士来说更是如此。因此,Windows产品一直保留着命令行模式这个工具。

     另外一个概念就是批处理文件(后缀名为.bat,来源于批量的英语单词batch),它是另外一种可以执行的文件。简单地说,批处理文件包含了很多DOS命令。文件执行时,就一条一条地执行这些命令。不一定顺序执行,像通用的程序设计语言一样,它也有自己的流程控制。批处理文件创建很简单:用任何一个文本编辑器(如Windows的记事本)创建一个文本文件,然后把后缀名改为.bat即可。创建好的批处理文件,你也可以用文本编辑器打开,查看它的源代码


、关于CATALINA_HOME环境变量的设置(适用于tomcat6/7

     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放置在两个百分号之间,表示引用这个环境变量的值。这样,当你把tomcat的安装目录换了以后,就只需要修改catalina_home的值,而不需要修改PATH的值了,因为它可以自动计算出新的正确值。

 本章内容摘自http://www.cnblogs.com/wkrbky/p/6351235.html,若有其它出处已注明












推荐阅读
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • Beetl是一款先进的Java模板引擎,以其丰富的功能、直观的语法、卓越的性能和易于维护的特点著称。它不仅适用于高响应需求的大型网站,也适合功能复杂的CMS管理系统,提供了一种全新的模板开发体验。 ... [详细]
  • 在日常生活中,支付宝已成为不可或缺的支付工具之一。本文将详细介绍如何通过支付宝实现免费提现,帮助用户更好地管理个人财务,避免不必要的手续费支出。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • Nginx 启动命令及 Systemctl 配置详解
    本文详细介绍了在未配置和已配置 Systemctl 的情况下启动 Nginx 的方法,并提供了详细的配置步骤和命令示例。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • publicclassBindActionextendsActionSupport{privateStringproString;privateStringcitString; ... [详细]
  • JUnit下的测试和suite
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • Windows Phone 弹出窗口实现方案
    在当前版本的 Silverlight for Windows Phone 中,由于缺乏对 ChildWindow 的支持,开发者需要采用其他方法来实现弹出窗口的功能。本文将探讨几种有效的解决方案。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 数据类型--char一、char1.1char占用2个字节char取值范围:【0~65535】char采用unicode编码方式char类型的字面量用单引号括起来char可以存储一 ... [详细]
author-avatar
小新亚笔
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有