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. JDBC中级篇(MYSQL)——在JDBC中如何获得表中的,自增长的字段值

    注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package c_increment; import java.sql.Connection; import java.sql.P ...

  2. Dynamics CRM实体系列之1:N、N:1以及N:N关系

    Dynamics CRM在实施过程中会遇到很多多个实体关联的问题,这样可以实现多个实体的记录通过关联的字段实现数据的综合展示,在Sql Server里面叫做外键,在Dynamics CRM叫做关系.D ...

  3. Python - 面向对象编程 - MRO 方法搜索顺序

    为什么会讲 MRO? 在讲多继承的时候:https://www.cnblogs.com/poloyy/p/15224912.html 有讲到, 当继承的多个父类拥有同名属性.方法,子类对象调用该属性. ...

  4. Shiro02

    Shiro认证 Pom依赖 <dependency> <groupId>org.apache.shiro</groupId> <artifactId>s ...

  5. jvm学习笔记:类加载过程

    类加载器子系统 类加载器的作用是加载class文件到内存 加载阶段->链接阶段->初始化阶段 ClassLoader只负责class文件的加载,至于是否能够运行由执行引擎判断 加载的类信息 ...

  6. JUnit5 快速入门指南

    1. 安装 在pom中添加依赖 <properties> <junit.jupiter.version>5.3.2</junit.jupiter.version> ...

  7. 清除router路由后面的参数

    清除router参数: 1.this.$router.push({ query: {}}) 2.var path = this.$route.path; //获取路由路径    this.$route ...

  8. RE Validation in JavaEE

    以下是关于RE校验的一些方法的基本功能: import java.util.regex.Pattern;<br> /** * 校验器:利用正则表达式校验邮箱.手机号等 * */<br ...

  9. Python树莓派 爬虫心得

    平台: 树莓派 linux 语言:python 搞一个爬虫都清楚是怎么回事,我这里玩过之后有下面的心得: 为什么要用树莓派呢,省电啊,没乱七八糟的桌面问题,可以一直开着. 1.树莓派上的磁盘写入对于不 ...

  10. Mysql实现无插入有更新(不知主键的情况下)

    网上很多资料说有两种方式 (必须现有唯一键) 1.INSERT 中ON DUPLICATE KEY UPDATE的使用 2.REPLACE的使用 通过可以得出结果: 如果a和b字段 能决定唯一 例子: ...