JDK,JRE在mac OS X中的目录结构

简介:

首先要明确一个问题,JDK与JRE的区别是什么? 
JRE: Java Runtime Environment. It is basically the Java Virtual Machine where your Java programs run on. It also includes browser plugins for Applet execution.

JDK: It’s the full featured Software Development Kit for Java, including JRE, and the compilers and tools (like JavaDoc, and Java Debugger) to create and compile programs. 
对应于命令行模式:

java -version 显示JRE版本
JDK包含了JRE,是一个工具集

javac -version 显示JDK版本
那么,显示的是什么版本,是系统的版本还是命令的版本? 
这里需要知道另外一个命令:

/urs/libexec/java_home -V 显示系统中所有的JDK版本
比如我的macbook上的显示: 
1.8.0_45, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home 
1.6.0_65-b14-466.1, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home 
1.6.0_65-b14-466.1, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

默认用的是第一个版本,继续:

echo $JAVA_HOME
输出为空

export JAVA_HOME=”/usr/libexec/java_home -v ‘1.6*’ “
输出: 
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

此时如果输入

java -version 或者 javac -version 显示的版本都是1.6.0,改动之前是1.8.0
猜想:运行java和javac命令受到java_home的影响,java_home改变了这两个命令的真实位置。

下面来寻找它们之间的关系: 
1.找到java和javac命令的真实位置

which java; which javac

/usr/bin/java 
/usr/bin/javac

ll /usr/bin/java; ll /usr/bin/javac

/usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java 
/usr/bin/javac -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javac
挖掘一下后面的一长串地址:

ll /System/Library/Frameworks/JavaVM.framework/Versions/

lrwxr-xr-x 1 root wheel 10 6 7 20:26 1.4 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 6 7 20:26 1.4.2 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 6 7 20:26 1.5 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 6 7 20:26 1.5.0 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 6 7 20:26 1.6 -> CurrentJDK 
lrwxr-xr-x 1 root wheel 10 6 7 20:26 1.6.0 -> CurrentJDK 
drwxr-xr-x 7 root wheel 238 6 7 20:27 A 
lrwxr-xr-x 1 root wheel 1 6 7 20:26 Current -> A 
lrwxr-xr-x 1 root wheel 59 6 7 20:26 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

ll /System/Library/Frameworks/JavaVM.framework/Versions/Current/

total 80 
drwxr-xr-x 45 root wheel 1530 6 7 20:27 Commands 
drwxr-xr-x 4 root wheel 136 4 15 01:19 Frameworks 
-rwxr-xr-x 1 root wheel 105200 5 28 2014 JavaVM 
drwxr-xr-x 42 root wheel 1428 6 7 20:27 Resources 
drwxr-xr-x 3 root wheel 102 6 7 20:27 _CodeSignature
在Commands中找到java和javac,运行它们,得到的版本号与JAVAHOME同步如果改变JAVA_HOME为版本1.8,即运行:

export JAVA_HOME=” /usr/libexec/java_home -v ‘1.8*’

/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java -version

显示为版本1.8

基本上到这里,可以得出一个结论:java和javac使用的真实命令位置,由$JAVA_HOME决定,它决定了命令行使用的JDK版本。

这个机制是怎样的?

当我们 > export JAVA_HOME ,usr/libexec/java_home -v '1.8*' 给出了JDK的真实位置:

/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
来看看这个目录有什么: 
ll /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home

total 52192 
-rw-rw-r– 1 root wheel 3244 4 11 02:11 COPYRIGHT 
-rw-rw-r– 1 root wheel 40 4 11 02:12 LICENSE 
-rw-rw-r– 1 root wheel 159 4 11 02:12 README.html 
-rw-rw-r– 1 root wheel 110114 3 10 08:47 THIRDPARTYLICENSEREADME-JAVAFX.txt 
-rw-rw-r– 1 root wheel 178403 4 11 02:12 THIRDPARTYLICENSEREADME.txt 
drwxrwxr-x 46 root wheel 1564 4 11 02:21 bin 
drwxrwxr-x 9 root wheel 306 4 11 02:11 db 
drwxrwxr-x 9 root wheel 306 4 11 02:11 include 
-rw-rw-r– 1 root wheel 5172318 3 10 08:47 javafx-src.zip 
drwxrwxr-x 10 root wheel 340 4 11 02:14 jre 
drwxrwxr-x 14 root wheel 476 4 11 02:14 lib 
drwxrwxr-x 5 root wheel 170 4 11 02:12 man 
-rw-rw-r– 1 root wheel 528 4 11 02:12 release 
-rw-rw-r– 1 root wheel 21239600 4 11 02:12 src.zip
令人惊奇是,这个目录下面的bin中的命令, 
与java 命令所在目录/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/ 
是一样的,也就是说 java 其实运行的是bin中命令java










本文转自ljianbing51CTO博客,原文链接: http://blog.51cto.com/ljianbing/2062376,如需转载请自行联系原作者

相关文章
|
3月前
|
安全 Oracle Java
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
275 0
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
安装JDK18没有JRE环境的解决办法
安装JDK18没有JRE环境的解决办法
1267 141
|
5月前
|
存储 算法 Java
JvM JDK JRE 三者区别与联系详解
本文深入解析了Java编程中的三个核心概念:JVM(Java虚拟机)、JDK(Java开发工具包)和JRE(Java运行环境)。JVM是执行Java字节码的虚拟计算机,实现“一次编译,到处运行”;JDK包含JRE及开发工具,用于编写和调试Java程序;JRE负责运行已编译的Java程序。文章详细阐述了它们的功能、组成及应用场景,并通过实例说明其在实际开发中的作用,帮助开发者理解三者联系与区别,提升开发效率与问题解决能力。适合Java初学者及进阶开发者学习参考。
826 3
|
6月前
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
151 18
|
6月前
|
开发框架 关系型数据库 Java
Linux操作系统中JDK、Tomcat、MySQL的完整安装流程以及J2EE后端接口的部署
然后Tomcat会自动将其解压成一个名为ROOT的文件夹。重启Tomcat,让新“植物”适应新环境。访问http://localhost:8080/yourproject看到你的项目页面,说明“植物”种植成功。
181 10
|
5月前
|
监控 Oracle Java
JVM JDK JRE 使用指南及组件封装方法详解
本指南全面介绍了JVM、JDK、JRE的使用方法与Java组件封装技巧。内容涵盖JDK安装配置、JRE使用、JVM参数调优(如堆内存设置和垃圾回收器选择),以及类、包的封装实践。通过示例展示工具类与数据访问组件的封装方法,并讲解JAR包创建与发布流程。此外,还提供了常见问题解决方案,如内存溢出处理和依赖冲突管理。帮助开发者掌握高效、规范的Java开发技能,提升代码复用性和可维护性。附带面试资料供进一步学习。
232 0
|
Oracle Java 关系型数据库
CentOS 7.6操作系统部署JDK实战案例
这篇文章介绍了在CentOS 7.6操作系统上通过多种方式部署JDK的详细步骤,包括使用yum安装openjdk、基于rpm包和二进制包安装Oracle JDK,并提供了配置环境变量的方法。
498 80
|
12月前
|
小程序 Java 程序员
JDK 和 JRE 有什么区别
JDK(Java Development Kit)是Java开发工具包,包含编译器、调试器等开发工具,用于开发Java程序。JRE(Java Runtime Environment)是Java运行环境,包含Java虚拟机和类库,用于运行Java程序。简言之,JDK用于编写Java程序,JRE用于运行这些程序。
378 2
|
存储 安全 Java
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别;什么是程序计数器,堆,虚拟机栈,栈内存溢出,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存

热门文章

最新文章

推荐镜像

更多