首页 > 代码库 > java中JDK的环境变量配置
java中JDK的环境变量配置
JDK环境变量装备
以下观念为自个自个了解,不一定完全正确,期待评论纠正!
关于jdk的环境变量装备,通常会讲到三个,分别是JAVA_HOME,CLASSPATH,PATH。
1、关于path,应该是最好了解的号码归属地查询,path是windows的体系环境变量,不是由于jdk而存在的,它的设置即是为了在恣意目录下履行jdk目录中bin文件夹应用程序的便利,将%JAVA_HOME%\bin目录存放于关键词挖掘工具path中,在恣意途径的cmd窗口中便都能够运转javac,java,jar等程序了。
2、关于JAVA_HOME,这个变量是指定你的jdk地点目录,注意这个变量值在赋值时结尾是没有分号的,设置这个环境变量有这个几个用途,一是在设置path和classpath时直接引证,便利下次更改jdk目录时的更改;二是对一些程序,需求这个变量的设置,比方tomcat就需求这个变量。
3、关于classpath变量,把它放到最终是由于这个比较复杂,重复测试了一晚上,对这个变量的知道如同仍是有点懵。
整体来说,这个变量指定了jdk查找类(class文件)的途径。设置格局有三:
一是指定jar文件,写出jar文件的完好绝对途径,途径中不允许有任何通配符,多个jar包之间用;离隔
二是指定某一途径下的一切jar文件(%JAVA_HOME%\jre\lib\*),此种方法途径的结尾必须运用*作为通配符,不允许通配符和其他字符混用,比方myjar*.jar、*.jar、*.*、myjar.*这些都是不被辨认的表达方法。指定jar文件还有一种方法是指定某一个详细的jar文件,比方 %JAVA_HOME%\jre\lib\rt.jar 这样便能够把rt.jar这个文件加到classpath中去。指定jar文件通常有这两种方法。
只指定一个途径是不能够的,比方%JAVA_HOME%\jre\lib\,这样的表达方法不能别jdk正确辨认jar包途径,这样的方法能够指定这个途径下的class文件,也即是下面讲的第三条。
三是指定某一途径下的一切class文件。这种指定只能用 %JAVA_HOME%\jre\lib\或%JAVA_HOME%\jre\lib 这种方法,而不能在最终运用通配符指定,比方%JAVA_HOME%\jre\lib\*或%JAVA_HOME%\jre\lib\*.class都是不能够的,前一种通配符指定的是jar文件。
另:在指定classpath时,途径最终若不加; 则classpath仅指定你写入的途径。若加了; 则jdk会默许在最终给你增加当时目录到classpath中去。
总结:classpath在设守时可指定一个目录途径,这个途径代表了jdk会在其下查找一切class文件;
能够指定一个仅带*通配符的途径,这个途径代表了jdk将查找其下的jar包中的class文件;
能够指定一个详细的不带任何通配符的jar文件途径,这时jdk会查找该jar包中的class文件;
classpath的途径之间用; 离隔,若最终一个途径后也跟了一个; 则会默许增加当时目录到classpath中,不然不会增加当时目录;
若classpath未指定任何内容,则jdk查找当时目录下的class文件;
若指定了classpath,则jdk会查找classpath,若classpath中有多个文件符合查找条件,则jdk按classpath中指定的次序来运转第一个查找到的class文件。
指定jar文件后,java命令便能够将jar文件作为一个目录,在履行程序时对其间的类进行查找。
指定*后,java程序便可把指定途径下一切的jar文件作为目录,并在履行程序时查找其间的类进行运用。
PS:
java文件在进行编译时需求用到%JAVA_HOME%\lib和%JAVA_HOME%\jre\lib目录下的jar包。
class文件在运转时只需求用到%JAVA_HOME%\jre\lib目录下的jar包即可。
能够这样了解(不一定正确),javac程序自身的运转便需求%JAVA_HOME%\lib环境的撑持,javac自身是一个包装器,它的本质内容在%JAVA_HOME%\lib中,所以在运用javac时必需求有%JAVA_HOME%\lib的存在。而javac在对java文件进行编译时又需求jre环境的撑持,所以又必须有%JAVA_HOME%\jre\lib的撑持。
---------------------以下内容为转载--------------------------------------------------------------------------------------------
JDK即是Java Development Kit.简略的说JDK是面向开发人员运用的SDK,它供给了Java的开发环境和运转环境。SDK是Software Development Kit 通常指软件开发包,能够包括函数库、编译程序等。(具有开发Java程序能力)
JRE是Java Runtime Enviroment是指Java的运转环境,是面向Java程序的运用者,而不是开发者。(具有运转Java程序能力)
假如装置了JDK,会发同你的电脑有两套JRE,一套坐落 \jre(JDK目录下) 别的一套坐落 C:\Program Files\Java\jre1.5.0_15 目录下(别的一独自目录下),后面这套比前面那套少了Server端的Java虚拟机,不过直接将前面那套的Server端Java虚拟机复制过来就行了。在装置JDK时,你也能够挑选是不是装置这个坐落 C:\Program Files\Java 目录下的JRE(JDK目录下)。假如你只装置JRE,而不是JDK,那么只会在 C:\Program Files\Java 目录下装置仅有的一套JRE。
JRE的地位就象一台PC机一样,咱们写好的Win32应用程序需求操作体系帮咱们运转,一样的,咱们编写的Java程序也必需求JRE才干运转。所以当你装完JDK后,假如分别在硬盘上的两个不一样当地装置了两套JRE,那么你能够幻想你的电脑有两台虚拟的Java PC机,都具有运转Java程序的功用。所以咱们能够说,只需你的电脑装置了JRE,就能够正确运转Java应用程序。
Question One: 为何Sun要让JDK装置两套一样的JRE?
这是由于JDK里边有很多用Java所编写的开发东西(如javac.exe、jar.exe等),并且都放置在 \lib\tools.jar 里。从下面比如能够看出,先将tools.jar改名为tools1.jar,然后运转javac.exe,显现如下成果: Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac /Main NoClassDefFoundError: com/sun/tools/javac http://www.fanselang.com /Main
NoClassDefFoundError: com/sun/tools/javac http://www.3h5.cn /Main
NoClassDefFoundError: com/sun/tools/javac http://www.4lunwen.cn /Main
NoClassDefFoundError: com/sun/tools/javac http://www.zx1234.cn /Main
NoClassDefFoundError: com/sun/tools/javac http://www.majiangji168.cn /Main
NoClassDefFoundError: com/sun/tools/javac http://www.penbar.cn /Main
NoClassDefFoundError: com/sun/tools/javac http://www.whathappy.cn /Main
NoClassDefFoundError: com/sun/tools/javac http://www.lunjin.net /Main
NoClassDefFoundError: com/sun/tools/javac http://www.ssstyle.cn /Main
NoClassDefFoundError: com/sun/tools/javac http://www.91fish.cn /Main 这个意思是说,你输入javac.exe与输入 java -cp c:\jdk\lib\tools.jar com.sun.tools.javac.Main 是一样的,会得到一样的成果。从这儿咱们能够证明javac.exe仅仅一个包装器(Wrapper),而制造的意图是为了让开发者免于输入太长的指命。并且能够发现\lib目录下的程序都很小,不大于2 9K,从这儿咱们能够得出一个定论。即是JDK里的东西几乎是用Java所编写,所以也是Java应用程序,因而要运用JDK所附的东西来开发Java程序,也必需求自行附一套JRE才行,所以坐落C:\Program Files\Java目录下的那套JRE即是用来运转通常Java程序用的。(通过JDK编译程序时,bin\javac.exe仅仅一个包装器,编译程序过程中一样需求有JRE撑持才行)
Question Two: 假如一台电脑装置两套以上的JRE,谁来决议呢?
这个重大任务就落在java.exe身上。Java.exe的作业即是找到适宜的JRE来运转Java程序。 Java.exe依照底下的次序来查找JRE:自个的目录下有没有JRE;父目录有没有JRE;查询注册表: [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment] 所以java.exe的运转成果与你的电脑里边哪个JRE被履行有很大的联系。
弥补:(小结)
1.JVM -- java virtual machine
JVM即是咱们常说的java虚拟机,它是整个java实现跨渠道的最中心的 有些,一切的java程序会首要被编译为.class的类文件,这品种文件能够在虚拟机上履行,也即是说class并不直接与机器的操作体系相对应,而是通过虚拟机直接与操作体系交互,由虚拟机将程序解说给本地体系履行。
2.JRE -- java runtime environment
JRE 是指java运转环境。光有JVM还不能成class的履行,由于在解说class的时分JVM需求调用解说所需求的类库lib。在JDK的装置目录里你能够找到jre目录,里边有两个文件夹bin和lib,在这儿能够以为bin里的即是jvm,lib中则是jvm作业所需求的类库,而jvm和lib和起 来就称为jre。所以,在你写完java程序编译成.class之后,你能够把这个.class文件和jre一起打包发给兄弟,这样你的兄弟就能够运转你写程序了。(jre里有运转.class的java.exe)
3.JDK -- java development kit
JDK是 java开发东西包,基本上每个学java的人都会先在机器上装一个JDK,那他都包括哪几有些呢?让咱们看一下JDK的装置目录。在目录下面有六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其间,真正在运转java时起作用的是以下四个文件夹:bin、include、lib、jre。现 在咱们能够看出这样一个联系,JDK包括JRE,而JRE包括JVM。
bin:最主要的是编译器(javac.exe)
include:java和JVM交互用的头文件
lib:类库
jre:java运转环境
(注意:这儿的bin、lib文件夹和jre里的bin、lib是不一样的)总的来说JDK是用于java程序的开发,而jre则是只能运转class而没有编译的功用。
eclipse等其他IDE有自个的编译器而不是用JDK bin目录中自带的(可在Window-Prefences-Java-Installed JREs 中进行装备),所以在装置时你会发现他们只需求你选中jre途径就ok了。