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 ...
随机推荐
- Java程序设计学习笔记(六) — 网络编程
时间:2016-5-8 02:03 --网络编程 网络传输实际上就是进行数据传输. 一.传输的步骤: 1.对对方IP地址进行定位. 2.将数据打包发送到 ...
- Go版本依赖--版本选择机制
目录 1. 版本选择机制 2.依赖包版本约定 2.1 Go module 之前版本兼容性 2.2 Go module 之后版本兼容性 3. 版本选择机制 3.1 最新版本选择 3.2 最小版本选择 1 ...
- mysql 8.0 1405的坑
因版本差异:password 可能对应:authentication_string字段 不行的话再尝试一下,并且修改下密码类型 ALTER USER 'root'@'%' IDENTIFIED WI ...
- 堆栈相关的经典题(c++)
1.定义队列 typedef struct node{ int data; struct node * next; }Node; typedef struct linkQueue { Node * f ...
- C++回调机制
一直对回调机制不是很了解,今天索性搜了很多资料顺便整理一下,进步一点点. 1.Callback方式(回调函数) 什么是回调函数? 简而言之,回调函数就是一个通过函数指针调用的函数.如果你把函数的指针( ...
- vue 引入 echarts 图表 并且展示柱状图
npm i echarts -S 下载 echarts 图表 mian.js 文件 引入图表并且全局挂载 //echarts 图表 import echarts from 'echarts' Vue. ...
- jvm学习笔记:类加载过程
类加载器子系统 类加载器的作用是加载class文件到内存 加载阶段->链接阶段->初始化阶段 ClassLoader只负责class文件的加载,至于是否能够运行由执行引擎判断 加载的类信息 ...
- inet_aton和inet_ntoa
3.1 inet_aton() int inet_aton(const char *cp, struct in_addr *inp); 参数说明: cp : IPv4点分十进制字符串,例如" ...
- SQL-Instead of 触发器
定义及优点 INSTEAD OF触发器指定执行触发器而不是执行触发 的SQL 语句,从而替代触发语句的操作. 在表或视图上,每个 INSERT.UPDATE 或 DELETE 语句最多可 ...
- Identity角色管理二(显示角色)
需要将目前所有角色名显示出来,方法同用户管理 一.创建Index acction public async Task<ActionResult> Index() { var roles = ...