美文网首页编程之道
理顺JDK和环境变量

理顺JDK和环境变量

作者: 7叶 | 来源:发表于2018-05-09 17:41 被阅读0次

一、JDK的安装

1、Java-Package choose

java_version

上述文档翻译:

  • JDK:针对Java开发者(Java developers)。包括了一个完整的JRE附加包工具,该专用JRE附加包的目的是提供开发,调试和模拟Java应用程序。

    JDK:Java SE Development Kit,Java开发环境。

  • Server JRE:针对的是在服务器上运行Java应用程序的管理员。用于在服务器上部署Java应用。包括了在服务器应用上所需要的JVM监控和公共工具,但是不包括浏览器集成(Java 插件)、自动更新、安装。

  • JRE:针对的是在一个桌面环境上运行Java的最终用户。覆盖了大多数的最终用户的需求,包含了在系统上运行Java程序所需要的一切

    JRE:Java Runtime Enviroment,Java运行环境。

2、3种安装包解压后的目录结构及说明

详见: JDK和JRE目录结构

  • JDK目录结构

    - java_dir
      | - jdk1.8.0
           | - bin  
           | - lib  
           | - db
           | - src.zip
           | - jre  // 专用JRE
                | - bin  
                | - lib  
           | ...
         | - jre1.8.0  // 公共JRE
              | - bin  
              | - lib  
    

    针对/java_dir/jdk/ 目录进行说明:

    • bin:存放开发工具的可执行文件。
      • java,解释器
      • javac,编译器
      • javadoc,文档工具,把API注释提取成HTML文档
      • jar,归档工具,把包结构打包成.jar文件
    • lib:开发工具所需要的类库。
      • dt.jar
      • tools.jar
    • db:纯Java开发的数据可 Derby,是一个开源的100%Java开发的关系数据库
    • src.zip:所有java核心库的源代码
    • jre:java运行环境 - JVM
      • bin:存放JVM的执行命令。
        • java,解释器
      • lib:JVM运行所需要的核心类库。
        • rt.jar,引导类。(IDE中API的所在包)

    /java_dir/jre 目录和java_dir/jdk/jre 目录的内容是一样的,都是用来运行Java程序的,即JVM。

  • Server-JRE目录结构

    - server-jre_dir
            | - jdk1.8.0
                 | - bin  
                 | - lib  
                 | - db
                 | - src.zip
                 | - jre  // 专用JRE
                      | - bin  
                      | - lib  
                 | ...
    

  • JRE文件树

    - jre_dir
      | -jre1.8.0  // 公共JRE
          | - bin  
          | - lib
    

3、JDK和JRE的结构辨析

**官方说明: ** JDK和JRE图示 图示说明

JDK_JRE

图示说明:

Java概念图将Java组件技术分级分类。

  • JDK所包含的组件:
    • Java语言
    • 工具和工具API
    • 部署
    • 用户界面工具包
    • 集成库
    • 其他基础库
    • Lang和Util基础库
    • Java虚拟机
  • JRE所包含的组件:
    • 部署
    • 用户界面工具包
    • 集成库
    • 其他基础库
    • Lang和Util基础库
    • Java虚拟机
  • Java SE API 所包含的内容:
    • 用户界面工具包
    • 集成库
    • 其他基础库
    • Lang和Util基础库

**分析: **

官方文档中,可知JDK与JRE相比,独有的部分是Java Language和Tools、Tools API。也就是说,JRE不具备Java应用程序开发的功能。

JDK = Server-JRE + JRE 。

  • 对于最终用户:只需要Java运行环境来运行其电脑上的java程序;因此,只安装JRE就可以了。
  • 对于服务器:需要编译、运行Java应用,而不需要访问Java应用;因此,只使用Server-JRE进行编译、解释。
  • 对于Java开发者:开发Java程序时要编译、解释,同时作为用户要运行其他Java应用;因此使用JDK。
  • 平常所说的Java自动更新,是指公共JRE的更新,以便适应网站的技术更新;而不是JDK的自动更新。

javac和java命令:

jdk/bin 目录下有javac和java命令(编译、解释);而在jdk/jre/binjre/bin 目录下只有java命令(解释)。


二、环境变量(Enviroment variable)的设置及作用

环境变量: 分为用户变量和系统变量。

1、用户变量(user variable)

只对当前用户有效(windows下作用不大,linux下用处大),是为了减低自己所做的修改对他人造成的影响。

一般系统变量的路径排在用户变量之前,如果双方都有的路径,会使用系统变量中的值。

2、系统变量(System variable)

1、JAVA_HOME变量(约定名称,供JDK、其他软件使用)

顾名思义: 这是Java的家,就是JDK文件夹的所在位置(安装路径)。

新建JAVA_HOME路径C:\Program Files\Java\jdk1.8.0_131

作用: 指向JDK的安装目录:

  • 1、像eclipse/intellij等软件可以借助该变量自动定位JDK
  • 2、tomcat等软件只认定这个变量来定位JDK
  • 3、使用变量,修改JDK位置更加灵活(CLASSPATH、PATH的引用)

2、CLASSPATH变量(约定名称,专为JDK而使用)

顾名思义: 这是要查找的类/class文件的所在路径,就是执行javac 命令时:要查找的类的位置和相关的类库位置。

已经不需要新建CLASSPATH路径了!!!.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

手工编译.java文件的几种情况:

假设C:\User\14002\Desktop\Print.java 是我们要编译的java源文件。

情况一:Print.java只是继承于Object类,且不需要引入外部.jar文件。

  • 1、绝对路径编译:

    打开DOS,处于任意路径下,输入:javac C:\User\14002\Desktop\Print.java 即可完成编译。

  • 2、相对路径编译:

    进入ODS,进入该文件所在目录后,输入:javac Print.java 即可。

情况二:Print.java继承其他类,或者要引入其他.jar文件。但是都在同一个目录下。

  • 编译方式和情况一相同。

情况三:Print.java继承某个父类,如MyObject.java类。或者引用某个.jar文件,如MyJar.jar。但是都不在同一个目录下。

  • 1、MyObject.class不在当前目录中(C:\test\MyObject.class),需要手动指定该class文件所在目录:

    javac -classpath C:\test\ C:\User\14002\Desktop\Print.java

  • 2、MyJar.jar不在当前目录中(C:\test\MyJar.jar),需要指定位置:

    javac -classpath C:\test\MyJar.jar C:\User\14002\Desktop\Print.java

为什么javac命令能执行?

因为在PAHT路径中配置的%JAVA_HOME%\bin 路径帮助我们找到了该目录下的javac.exe 执行命令。

CLASSPATH路径的作用?

以下内容来自《Java编程思想》。

1、Java 解释器的工作程序如下:

首先,java.exe找到环境变量CLASSPATH。

CLASSPATH 包含了一个或多个目录,它们作为一种特殊的“根”使用,从这里展开对.class 文件的搜索。

从那个根开始,解释器会寻找包名,并将每个点号(句点)替换成一个斜杠,从而生成从CLASSPATH 根开始的一个路径名(所以package foo.bar.baz 会变成foo\bar\baz 或者foo/bar/baz;具体是正斜杠还是反斜杠由操作系统决定)。

随后将它们连接到一起,成为CLASSPATH 内的各个条目(入口)。

以后搜索.class 文件时,就可从这些地方开始查找与准备创建的类名对应的名字。

此外,它也会搜索一些标准目录——这些目录与Java 解释器驻留的地方有关。

2、CLASSPATH是Java编译器(javac.exe)的一个环境变量。

它的作用是指定类搜索路径,它与import、package关键字有关。

当你写下improt java.util.* 时,编译器面对import关键字时,就知道你要引入java.util这个package中的所有类。

但是编译器如何知道你把这个package放在哪里了呢?

所以你首先得告诉编译器这个package的所在位置。如何告诉它呢?就是设置CLASSPATH啦~

如果java.util这个package在c:\jdk\ 目录下,你得把c:\jdk\这个路径设置到CLASSPATH中去!当编译器面对import java.util.* 这个语句时,它先会查找CLASSPATH所指定的目录,并检视子目录java\util是否存在,然后找出名称吻合的已编译文件(.class文件)。如果没有找到就会报错!

当你自己开发一个package时,如果想要用这个package中的类;自然,你也得把这个package所在的目录设置到CLASSPATH中去!

然而,使用JAR 文件时要注意一个问题:必须将JAR文件的名字置于类路径里,而不仅仅是它所在的路径。所以对一个名为grape.jar 的JAR 文件来说,我们的类路径需要包括:CLASSPATH=.;D:\JAVA\LIB;C:\flavors\grape.jar

CLASSPATH的设定,对JAVA的初学者而言是一件棘手的事。所以Sun让JAVA2的JDK更聪明一些。你会发现,在你安装之后,即使完全没有设定CLASSPATH,你仍然能够编译基本的JAVA程序,并且加以执行。

可以看出,CLASSPATH 里将会包含大量备用的搜索路径。

但是,在JDK 1.5之后,就没有必要配置CLASSPATH了:

因为1.5版本以上JDK:

  • 1、它会自动搜索当前路径下的类文件
  • 2、而且使用Java的编译和运行工具时,系统可以自动加载dt.jar(是关于运行环境的类库,主要是swing的包)和tools.jar(是关于一些工具的类库)文件中的Java类

详见: JDK官方安装、配置说明

3、PATH变量

**path变量的作用: **

windows系统根据环境变量中的PATH变量查找命令并执行,如果找不到则出现“XXX不是内部或外部命令,也不是可运行的程序或批处理文件”错误。

path变量名不分大小写,应用程序或DOS界面会遍历path的路径来查找命令并调用。

path变量的应用举例:

path路径的作用是为DOS命令(cmd)预设一大串的可供搜索命令来匹配 的目录路径,比如在命令行想要调用mysql来登录操作或者是使用git。

  • 想在DOS中使用mysql:

mysql.exe的路径为:C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql.exe

我们在PATH中添加一段路径C:\Program Files\MySQL\MySQL Server 5.7\bin;那么,我们在cmd中直接就可以调用mysql -u root -p来进行进行登录了。

因为有对应的PATH路径存在,这条命令实际上找到了路径下的mysql.exe来执行我们的命令。

  • 想在DOS中使用git:

git.exe的路径为:C:\Program Files\Git\cmd\git.exe

我们在PATH中添加的路径值为C:\Program Files\Git\cmd,同理,我们可以使用git 命令来执行。

举一反三

  • 在DOS中启动chrome:

你可以在用户变量中的Path变量中加入chrome浏览器的路径C:\Program Files (x86)\Google\Chrome\Application

那么你在cmd中输入chrome,回车。即可启动chrome浏览器。

因为chrome.exe的路径是:C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

配置JDK需要的PATH路径

顾名思义: path就是路径了,是在开发中调用相关命令如 javacjava 的所在位置。

作用: 是在任何目录下都能调用与java开发相关的命令。

追加PATH路径%JAVA_HOME%\bin;

4、路径配置图解:

- jdk1.8.0  (1、JAVA_HOME)
    | - bin  (3、PATH)
    | - jre
    | - lib
         | - dt.jar     -->  [2、CLASSPATH]
         | - tools.jar  -->  [2、CLASSPATH]  .  -->  [2、CLASSPATH]

注意: 现在已经不需要配置CLASSPATH路径了。

5、MS-DOS下手动编译、执行java文件

Dos界面: 就是windows下的MS-DOS 方式,cmd是command的缩写。可以执行一些命令。

1、在.../user/desktop/ 桌面上生成Print.java 文件:

public class Print {

    public static void main(String[] args){
        for (int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }
    }

}

作用:打印传入的每个参数。

String[] args 的作用是:在Docs界面,把执行.class 文件时附带传进的所有参数(以空格隔开)分别存入args这个字符数组中;之后可以使用args这个数组中的参数。

2、在Dos界面

  • 进入.java文件所在目录。
  • javac 命令编译Print.java 文件,得到Print.class 文件。
  • java 命令执行.class文件,并传入4个参数
  • 输出java程序运行结果
dos

3、JDK的环境变量总结

在windows下:

  • 对于JDK:其实只需要设置PATH路径即可,把xx/jdk/bin 目录追加进去。

    其专用JRE(xx/jdk/jre)可以自动被xx/jdk/bin/ 中的命令调用。

    其公共JRE(xx/jre)自动被注册到系统的注册表当中,供其他应用程序调用。

  • 对于JRE:不需要设置PATH路径,直接使用即可。

    因为JRE在安装时就自动被注册到系统的注册表当中了。

  • 因此,公共JRE会被自动注册到系统的注册表之中,无需配置。

查看系统注册表:

  • 1、Win + R,输入regedit。
  • 2、在[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft] 下有Java相关的注册表记录。

小结论:

  • 不管是在windows下还是linux下,配置PATH变量的目的,都是为了在DOS界面/CMD界面可以直接调用xx/jdk/bin 目录中的java命令,也就是为了在java编程时使用IDEA等工具能正确编译、执行java程序。

    所以PATH变量的目的是用于java开发。

  • 当需要运行Tomcat服务器时,由于Tomcat需要JRE环境,所以它根据系统的环境变量来寻找JRE的位置。详见Tomcat官方安装、配置说明

    • 安装JDK的情况下,设置JAVA_HOME 即可,Tomcat使用JAVA_HOME/jre 的JRE环境。或者设置JRE_HOME 来指定公共JRE的位置。
    • 只安装JRE的情况下,设置JRE_HOME 为JRE所在目录即可。

三、Linux下JDK环境变量的设置

一般来说,我们解压JDK的tar包的位置可能有:

  • /usr/local/ 目录,这里存放用户的应用程序和文件,类似windows的program files 目录。
  • /opt/ 目录,这是给主机额外安装软件的目录。

假设现在的JDK路径为:/opt/java8/jdk1.8.0 目录。

环境变量的配置:

1、所有用户的shell都有权访问的环境变量,这种做法在多人情况下可能带来安全性问题。

1、打开配置文件:vim /etc/profile

2、输入如下内容:

export JAVA_HOME=/opt/java8/jdk1.8.0  # Tomcat运行需要JRE环境
export PATH=$JAVA_HOME/bin:$PATH  # 开发java时需要

# export是把变量导出为全局变量

3、读取、执行配置文件:source /etc/profile

4、查看JDK安装:java -version

2、用户级别的环境变量的控制,也是最靠谱的方法。

如果需要给某个用户权限使用这些环境变量,只需要修改其个人用户家目录下的.bash_profile 文件就可以了。

1、打开用户家目录下的.bash_profile 文件:vim .bash_profile

2、输入以下内容:

# 同上一致

3、重新登录

JDK的卸载:

进入JDK的安装目录的_uninst 目录,在shell终端执行命令:./uninstall.sh 即可。

相关文章

网友评论

    本文标题:理顺JDK和环境变量

    本文链接:https://www.haomeiwen.com/subject/iljorftx.html