`

现在的JDK为什么有两个jre?

阅读更多
今天同事在编译Maven工程时,显示jre报错
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project omega-common: Compilation failure
[ERROR] Unable to locate the Javac Compiler in:
[ERROR] C:\Program Files\Java\jre1.8.0_91\..\lib\tools.jar
[ERROR] Please ensure you are using JDK 1.4 or above and
[ERROR] not a JRE (the com.sun.tools.javac.Main class is required).
[ERROR] In most cases you can change the location of your Java
[ERROR] installation by setting the JAVA_HOME environment variable.
 
 
我根据经验将IDE当前指定的jre切换到jdk目录下便成功运行(原先是jre路径)。
我问同事:“难道之前你没有切换路径就可以成功编译码?”,同事回答今天才出现这个问题。这不禁引起我们的思考,指定的两个JRE有什么区别?并且jre编译过程中扮演什么样的角色?
大家肯定在安装JDK的时候会有选择是否安装单独的jre,一般都会一起安装,我也建议大家这样做。因为这样更能帮助大家弄清楚它们的区别:

Jre 是java runtime environment, 是java程序的运行环境。既然是运行,当然要包含jvm,也就是大家熟悉的虚拟机啦,还有所有java类库的class文件,都在lib目录下打包成了jar。大家可以自己验证。至于在windows上的虚拟机是哪个文件呢?学过MFC的都知道什么是dll文件吧,那么大家看看jre/bin/client里面是不是有一个jvm.dll呢?那就是虚拟机。

Jdk 是java development kit,是java的开发工具包,里面包含了各种类库和工具。当然也包括了另外一个Jre. 那么为什么要包括另外一个Jre呢?而且jdk/jre/bin同时有client和server两个文件夹下都包含一个jvm.dll。说明是有两个虚拟机的。这一点不知道大家是否注意到了呢?

相信大家都知道jdk的bin下有各种java程序需要用到的命令,与jre的bin目录最明显的区别就是jdk下才有javac,这一点很好理解,因为 jre只是一个运行环境而已。与开发无关,正因为如此,具备开发功能的jdk自己的jre下才会同时有client性质的jvm和server性质的 jvm, 而仅仅作为运行环境的jre下只需要client性质的jvm.dll就够了。

记得在环境变量path中设置jdk/bin路径麽?这应该是大家学习Java的第一步吧,老师会告诉大家不设置的话javac和java是用不了的。确实jdk/bin目录下包含了所有的命令。可是有没有人想过我们用的java命令并不是 jdk/bin目录下的而是jre/bin目录下的呢?不信可以做一个实验,大家可以把jdk/bin目录下的java.exe剪切到别的地方再运行 java程序,发现了什么?一切OK!

那么有人会问了?我明明没有设置jre/bin目录到环境变量中啊?

试想一下如果java为了提供给大多数人使用,他们是不需要jdk做开发的,只需要jre能让java程序跑起来就可以了,那么每个客户还需要手动去设置环境变量多麻烦啊?所以安装jre的时候安装程序自动帮你把jre的java.exe添加到了系统变量中,验证的方法很简单,大家看到了系统环境变量的 path最前面有“%SystemRoot%system32;%SystemRoot%;”这样的配置,那么再去Windows/system32下面去看看吧,发现了什么?有一个java.exe。

如果强行能够把jdk/bin挪到system32变量前面,当然也可以迫使使用jdk/jre里面的java,不过除非有必要,我不建议大家这么做。使用单独的jre跑java程序也算是客户环境下的一种测试。
  • 大小: 46.6 KB
分享到:
评论

相关推荐

    安装JDK有两套JRE的原因

    安装JDK时产生的两个JRE的原因,一套位于<JDK安装目录>\jre目录,\Java\jre1.6.0_02目录下。

    AIX JDK1.8 JRE1.8 32位

    标题中的"AIX JDK1.8 JRE1.8 32位"指的是IBM的Java开发工具包(JDK)和Java运行环境(JRE)的32位版本,这两个组件都是针对AIX操作系统设计的。AIX,全称Advanced Interactive eXecutive,是IBM推出的一种基于UNIX的...

    jdk与jre的区别

    在安装 JDK 之后,在安装目录中会有两个版本的 JRE 文件:专用 JRE 和公用 JRE。 * 专用 JRE:安装在 JDK 内部,提供了 JDK 中包含的工具的运行环境。 * 公用 JRE:安装在 JDK 外部,提供了 Java 程序的运行环境,...

    jdk1.8和jre1.8版本

    这两个组件各自扮演着不同的角色,是Java应用程序开发和执行的基础。 JDK是Java程序员的主要工具,它包含了编译Java源代码、调试程序、打包应用以及运行Java程序所需的所有工具。在JDK1.8.0_201中,你可以找到以下...

    jdk-7u10-windows-i586安装后jdk中jre文件

    在Java编程领域,JDK(Java Development Kit)和JRE(Java Runtime Environment)是两个至关重要的组件。JDK是Java开发者用于编写、编译和调试Java应用程序的完整工具集,而JRE则是运行Java程序所必需的环境。本文将...

    jdk-7u45和jre-7u71.zip

    在给定的压缩包文件"jdk-7u45和jre-7u71.zip"中,包含了两个主要的组件:jdk-7u45-windows-x64.exe和jre-7u71-windows-x64.exe,分别对应于Java SE 7的第45个更新版本的JDK和第71个更新版本的JRE,均为64位Windows...

    jdk和jre的区别

    JRE目录下的`bin`目录包含了两个子目录:`server`和`client`。这两个目录分别存放了两种不同性能表现的JVM动态链接库(.dll文件)。`server`目录下的JVM适用于高性能服务器环境,而`client`目录下的JVM适用于客户端...

    JRE与JDK的区别

    Java开发和运行环境中,JRE(Java Runtime Environment)与JDK(Java Development Kit)是两个至关重要的组件。它们之间的主要区别在于用途和包含的内容。 JRE是Java运行环境,它是运行Java应用程序所必需的。它...

    jdk与jre的不同

    简而言之,JDK和JRE是Java生态系统中的两个关键组成部分,它们之间存在着紧密的联系但也有所区别。对于开发者来说,需要安装JDK来进行Java程序的开发;而对于普通用户来说,则只需要安装JRE即可运行Java程序。理解这...

    java1.8jdk/jre.rar

    Java 1.8 JDK/JRE 是Java开发工具包和Java运行环境的组合,对于任何Java开发者来说都是必不可少的基础。在本压缩包中,你将找到用于编写、编译和运行Java应用程序的所有必要组件。让我们深入了解一下这两个核心组件...

    JDK和JRE文件的区别

    在深入探讨JDK(Java Development Kit)与JRE(Java Runtime Environment)之间的区别之前,我们先来定义一下这两个概念。JDK是Java开发工具包,它包含了编译、运行和调试Java应用程序所需的所有工具;而JRE则是Java...

    AIX-JDK8-JRE8_64位.rar

    标签"AIX JDK JRE"明确了主要的两个组件:JDK和JRE。JDK(Java Development Kit)是开发和调试Java应用程序所需的一套工具,包括编译器、调试器、文档生成器以及其他实用工具。JRE(Java Runtime Environment)则是...

    java jdk jre8

    Java JDK与JRE是Java开发和运行环境中的两个核心组件,它们在软件开发和应用程序执行中扮演着至关重要的角色。本文将深入探讨这两个组件的概念、功能以及它们之间的关系。 Java Development Kit (JDK) 是Oracle公司...

    jdk-7&jre-7.0

    这两个组件是Java编程语言的核心组成部分,用于开发和运行Java应用程序。 JDK是Java开发者的必备工具集,包含了编译器、调试器、文档生成器以及各种实用工具,如Javadoc和Java Archive (JAR) 文件打包工具。在JDK 7...

    JDK JRE 的作用与区别

    在深入探讨JDK与JRE的具体差异之前,我们首先需要了解这两个概念的基本定义及其在Java开发环境中的地位。 #### 二、JDK(Java Development Kit) JDK是Java开发工具包的简称,它包含了Java运行环境(JRE)、Java工具...

    jre-8u361 和 jdk-8u361 windows-x64 合集, 截止至2023 年 6 月最新版

    本合集包含了JDK 8u361和JRE 8u361,这两个版本截至2023年6月是最新的更新,适用于Windows 64位操作系统。 **JDK** 是Java开发者的主要工具,它提供了完整的开发和调试环境。JDK包括以下主要组件: 1. **Java编译器...

Global site tag (gtag.js) - Google Analytics