MacOS下Java与JDK关系与相关路径
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关系与相关路径的更多相关文章
- Java的cmd配置(也即Java的JDK配置及相关常用命令)——找不到或无法加载主类 的解决方法
Java的cmd配置(也即Java的JDK配置及相关常用命令) ——找不到或无法加载主类 的解决方法 这段时间一直纠结于cmd下Java无法编译运行的问题.主要问题描述如下: javac 命令可以正 ...
- java eclipse jdk 关系
java 经常用到多个jdk版本 1.7 1.8.... 兼容时几个位置 处理 eclipse.ini (A处) #-vm#C:\Program Files\Java\jdk1.7.0_79\bi ...
- MacOS下Java Mission Control无法正常启动
参考JMC(Java Mission Control)在mac下无法启动和显示界面 附件下载地址备份(org.eclipse.swt.cocoa.macosx.x86_64-3.112.0.jar) ...
- 【java】JDK、JRE、JVM的关系
目录结构: contents structure [-] 什么是JDK,JRE,JVM 安装JDK的时候为什么有两个jre 专用JRE 共用JRE 共用JRE和专用JRE的对比 java的跨平台特性 ...
- 【Java】macOS下编译JDK8
安装mercurial brew install mercurial 下载源码 1234 hg clone http://hg.openjdk.java.net/jdk8/jdk8 java-sour ...
- JDK问题--linux下java unrecognized class file version错误的解决
linux下java unrecognized class file version错误的解决 环境:RedHat Linux Enterprise 5.4 问题:java.sun.com下载jdk1 ...
- Linux(Ubuntu 16) 下Java开发环境的配置(一)------JDK的配置
前言: 本文介绍的是通用的安装方法,一般linux系统均可使用该方法安装.本文以Java8环境为例进行配置. 1.JDK的下载 进入java下载页(http://www.oracle.com/te ...
- windows7环境下java jdk的配置
第一步: 肯定是先下载好java jdk啦~~ 网址在这里:http://www.oracle.com/technetwork/java/javase/downloads/index.html 打开这 ...
- Windows10系统下Java JDK下载、安装与环境变量配置(全网最全步骤)
1.首先要明确: JDK.JRE.JVM的含义 2.下载目前最新的JDK:Java SE Development Kit 17,传送门::https://www.oracle.com/java/tec ...
随机推荐
- 并发编程之:synchronized
大家好,我是小黑,一个在互联网苟且偷生的农民工. 之前的文章中跟大家分享了关于Java中线程的一些概念和基本的使用方法,比如如何在Java中启动一个线程,生产者消费者模式等,以及如果要保证并发情况下多 ...
- RabbitMq死信队列(接盘侠)
队列创建之后,后期对其修改或者参数添加会报错.需要把队列重新删除,重新创建线上环境不能把队列删除,优雅安全的方式是重新建一个队列,把死信队列相关的队列进行绑定 在有过期时间的队列中设定最大接收能力5条 ...
- win命令
netstat -nao | findstr "8888"taskkill /pid 15064 /f清理端口被占用win+r进入cmdcmd窗口中输入notepad进入记事本sh ...
- new一个对象的时候,实际做了些什么
当我们说new一个对象的时候,实际做了些什么, 可以参考下图理解
- 单片机学习(九)定时器扫描按钮和数码管与PWM的使用
目录 一.使用定时器扫描按钮和数码管 1. 使用定时器进行扫描的缘由 2. 定时器扫描独立按钮 3. 定时器扫描数码管 二.PWM的使用 1. PWM简介 2. LED呼吸灯 实现一 实现二 3. 按 ...
- ubuntu 设置简单密码
ubuntu自带的修改密码界面要求比较长.比较复杂的密码.但通过命令行可以不受此限制. 用如下命令,按提示输入密码即可. sudo passwd username
- TFRecord读写简介+Demo 基于Ubuntu18.04+Tensorflow1.12 无WARNING
简介 TFRecord是TensorFlow官方推荐使用的数据格式化存储工具. 它规范了数据的读写方式. 只要生成一次TFRecord,之后的数据读取和加工处理的效率都会得到提高. 将图片转换成TFR ...
- 使用 baget 搭建私有 nuget 私有服务
现在几乎所有语言都提供包管理工具,比如 JavaScript 的 npm ,Java 的 Maven ,Dart 的 pub ..Net 程序当然是 NuGet .NuGet 也出现很多年了,奇怪的是 ...
- 阿里云服务器安装配置nginx
服务器: 阿里云 Alibaba Cloud Linux 下载 进入到预计存放nginx的目录,比如:/usr/local/ 下载nginx压缩包,并解压 cd /usr/local wget htt ...
- 洛谷P1083 借教室 题解
题目 [NOIP2012 提高组] 借教室 题解 这道题是几周之前做到的一道题,本来不想讲的,因为这道题也是用到了二分答案的方法,这类题目之前已经发布过两篇题解了.但这道题还运用了差分数组这个思想,所 ...