MacOS下Java与JDK关系与相关路径

macOS下的Java与JDK的路径曾经困扰过我一段时间,今天稍有些忘记,故记下笔记,整理一下。Java与JDK的关系不在本文笔记之内,Javaer常识。

偏好设置中的Java

在偏好设置中的Java是浏览器的插件,仅提供Java运行环境,其目录我们通过点击该Java图标,进入Java控制面板 —— Java —— 查看,可以显示对应的目录,本人的Java已经升级到了1.8_161,目录如下:

/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java

通过/Library/Internet\ Plug-Ins目录名称我们也可以知道这个Java是作为网络相关(如浏览器)的Applet插件的。再次强调,这个目录下的Java仅仅提供Java基础运行环境,进入bin中我们可以看到并没有javac,也可以说明这一点。

所以,我们完全可以删除Internet Plug-Ins文件夹下的JavaAppletPlugin.plugin这个文件夹,并且同时为了删除偏好设置中的图标,需要删除/Library/PreferencesPanes/JavaControlPanel.prefPane这个文件夹,看文件夹名不难理解。(理论上是这样的,但是没有必要删除)

通过oracle安装的jdk

当我们安装了oracle的jdk之后,我们在命令行中输入which java,通常会显示:

/usr/bin/java

进入/usr/bin中,查看该目录下java的详细信息,可以看到如下的信息:

$ ls -l java
lrwxr-xr-x 1 root wheel 74 11 11 15:08 java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

可以看到这里的java是一个软链接,链接到上述输出目录中。我们进入到Versions目录中,这里我们只安装了一个版本的jdk,所以只会有如下的显示信息:

drwxr-xr-x  8 root  wheel  256  1 24 22:01 A
lrwxr-xr-x 1 root wheel 1 11 11 15:05 Current -> A

可以看到,Current也只是一个软链接,链接到该目录下的A文件夹(这样的好处是装了多个版本java后,可以方便地调整Current指向,使得不同版本java变成系统默认的)

我们可以看到,实际上这里面也还不是真正的jdk目录,A文件夹是安装java后系统生成的。它里面的Commands文件夹下有个java可执行文件,然而,我们可以看到这个目录下结构明显不是正常的jdk的目录结构,我们会发下这个目录下有一个java_home,使用如下命令:

./java_home -V
# output
Matching Java Virtual Machines (1):
1.8.0_121, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home

上面是我机器上的输出,这个输出才是真正的jdk目录。所以在我看来,oracle安装过程应该是如下流程的:

1.首先解压完整的JDK到
/Library/Java/JavaVirtualMachines/jdk{version}.jdk/Content/Home 2.在/System/Library/Frameworks/JavaVM.framework/Versions/目录中 1)创建对应的A或者其他版本的文件夹(猜测是不同的JDK版本依次B、C、D之类的) 2)创建Current文件夹(已存在就忽略)并软链接到A或其他版本的文件夹上
# 从A中的Commands文件夹内容本人认为,这个文件夹就是用来协调jdk相关的资源的,比如java与javac,而这里面的java、javac一类的命令会去调用第一步中对应版本的jdk目录中的java、javac
3.将/usr/bin下的java、javac、javadoc等软链接到第二步中对应的bin上
ls -l /usr/bin/java*
lrwxr-xr-x 1 root wheel 74 11 11 15:08 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
lrwxr-xr-x 1 root wheel 75 11 11 15:08 /usr/bin/javac -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javac
lrwxr-xr-x 1 root wheel 77 11 11 15:08 /usr/bin/javadoc -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javadoc
lrwxr-xr-x 1 root wheel 75 11 11 15:08 /usr/bin/javah -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javah
lrwxr-xr-x 1 root wheel 75 11 11 15:08 /usr/bin/javap -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javap
lrwxr-xr-x 1 root wheel 82 11 11 15:08 /usr/bin/javapackager -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javapackager
lrwxr-xr-x 1 root wheel 76 11 11 15:08 /usr/bin/javaws -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javaws

根据上面的常识,我们也完全可以卸载oracle安装的Java,同时,我们可以将真正的Java目录提取出来,放置到我们需要的地方,通过设置环境变量的方式来设置JAVA_HOME。

MacOS下Java与JDK关系与相关路径的更多相关文章

  1. Java的cmd配置(也即Java的JDK配置及相关常用命令)——找不到或无法加载主类 的解决方法

    Java的cmd配置(也即Java的JDK配置及相关常用命令) ——找不到或无法加载主类  的解决方法 这段时间一直纠结于cmd下Java无法编译运行的问题.主要问题描述如下: javac 命令可以正 ...

  2. java eclipse jdk 关系

    java 经常用到多个jdk版本 1.7   1.8.... 兼容时几个位置 处理 eclipse.ini (A处) #-vm#C:\Program Files\Java\jdk1.7.0_79\bi ...

  3. MacOS下Java Mission Control无法正常启动

    参考JMC(Java Mission Control)在mac下无法启动和显示界面 附件下载地址备份(org.eclipse.swt.cocoa.macosx.x86_64-3.112.0.jar) ...

  4. 【java】JDK、JRE、JVM的关系

    目录结构: contents structure [-] 什么是JDK,JRE,JVM 安装JDK的时候为什么有两个jre 专用JRE 共用JRE 共用JRE和专用JRE的对比 java的跨平台特性 ...

  5. 【Java】macOS下编译JDK8

    安装mercurial brew install mercurial 下载源码 1234 hg clone http://hg.openjdk.java.net/jdk8/jdk8 java-sour ...

  6. JDK问题--linux下java unrecognized class file version错误的解决

    linux下java unrecognized class file version错误的解决 环境:RedHat Linux Enterprise 5.4 问题:java.sun.com下载jdk1 ...

  7. Linux(Ubuntu 16) 下Java开发环境的配置(一)------JDK的配置

    前言: 本文介绍的是通用的安装方法,一般linux系统均可使用该方法安装.本文以Java8环境为例进行配置.   1.JDK的下载 进入java下载页(http://www.oracle.com/te ...

  8. windows7环境下java jdk的配置

    第一步: 肯定是先下载好java jdk啦~~ 网址在这里:http://www.oracle.com/technetwork/java/javase/downloads/index.html 打开这 ...

  9. Windows10系统下Java JDK下载、安装与环境变量配置(全网最全步骤)

    1.首先要明确: JDK.JRE.JVM的含义 2.下载目前最新的JDK:Java SE Development Kit 17,传送门::https://www.oracle.com/java/tec ...

随机推荐

  1. Tensorflow 2.0 深度学习实战 —— 详细介绍损失函数、优化器、激活函数、多层感知机的实现原理

    前言 AI 人工智能包含了机器学习与深度学习,在前几篇文章曾经介绍过机器学习的基础知识,包括了监督学习和无监督学习,有兴趣的朋友可以阅读< Python 机器学习实战 >.而深度学习开始只 ...

  2. Java反射的浅显理解

    一.回顾反射相关的知识 1.在xml文件中使用反射的好处: 1)代码更加灵活,后期维护只需要修改配置文件即可 · 初学者一般习惯于在代码本身上直接修改,后期也可以修改配置文件达到相同的目的 · 修改配 ...

  3. VMware ESXi 7.0 U2 SLIC & Unlocker Intel NUC 专用镜像 202109 更新

    2021.08.31 更新:集成 "vmkusb-nic-fling" 和 "nvme-community",现在只有一个镜像. 2021.06.16 更新:集 ...

  4. Win7安装 Mysql 5.7.22客户端

    根据自己的操作系统下载对应的32位或64位的压缩包: http://dev.mysql.com/downloads/mysql/ 官网下载 选择Windows对应的版本下载 不注册直接下载 安装步骤 ...

  5. Python中的文件处理和数据存储json

    前言:每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序来说尤其如此. 例如,你可以编写一个这样的程序:读取一个文本文件的内容,重新设置这些数据的格式并将其写入文件,让浏览器 ...

  6. vue 之 后端返回空字符串用 null 和 “”以及 undefind 判断不到的问题

    原文: <!-- <span v-if="scope.row.buyer_credit_score != '' || scope.row.buyer_credit_score ! ...

  7. python代码检查工具(静态代码审查)

    python静态代码检查 我们知道python是一门脚本语言,不像C#/Java等编译型语言可以在编译阶段就报出代码错误,脚本语言往往需要在运行期执行到这段代码时才会抛出代码错误. 那么在实际商业项目 ...

  8. ABP 极简入门教程(一)

    本示例不讲概念,只讲怎么用,概念性的内容没有比官方文档更清楚的了,我也正在学习,可能理解的地方有不对的欢迎一起交流,但需要您了解以下内容才能看明白 asp.net core Entity Framew ...

  9. JS002. map( ) 和 filter( ) 的区别和实际应用场景(递归函数、深度优先搜索DFS)

    在开发过程中难免会碰到省市区级联的操作,一般后端人员是不愿意将中文储存在数据库的. 由于应用页面较多,我们在通过区域Code写查字典函数时应该注意函数的 时间复杂度 / 空间复杂度. 如果用三层for ...

  10. python动态网站爬虫实战(requests+xpath+demjson+redis)

    目录 前言 一.主要思路 1.观察网站 2.编写爬虫代码 二.爬虫实战 1.登陆获取cookie 2.请求资源列表页面,定位获得左侧目录每一章的跳转url(难点) 3.请求每个跳转url,定位右侧下载 ...