macOS版Java开发环境搭建
1. Mac平台CPU架构和Rosetta
1.1 Mac平台CPU架构
早期Mac电脑都是使用Intel CPU,但是2020年以后苹果在ARM架构基础上自己研发CPU,例如M1,M1 Pro,M1 Max,M1 Ultra,M2,M2 Pro,M2 Max,M2 Ultra等等用于不同的Mac电脑(MacBook Air,MacBook Pro,Mac Studio,Mac Pro)
因此苹果的Mac电脑有Intel x86架构和ARM架构两种不同的CPU架构
那么问题来了,如何知道自己所使用Mac电脑的CPU架构?
在macOS Ventura点击左上角的苹果菜单,然后选择关于本机
在弹出的macOS Ventura概览窗口中看到芯片是Apple开头的就是ARM架构
在弹出的macOS Montery概览窗口中看到芯片包含Intel就是 Intel x86架构
正是因为两种不同的CPU架构,直接导致基于Intel x86架构开发的程序(例如阿里旺旺、金山文档、恒星播放器等等)是无法直接运行在基于ARM架构的CPU上,例如M1 Max,M2 Max,M2 Ultra等等。
1.2 Rosetta
1.2.1 什么时候需要Rosetta
苹果公司提供了一个翻译工具-Rosetta 2,通过 Rosetta 2,搭载 Apple 芯片的 Mac 可以使用专为配备 Intel 处理器的 Mac 构建的 App,这样也就意味着以前为Intel CPU开发的程序可以通过Rosetta 2 运行在苹果芯片的Mac电脑上,例如向日葵、阿里旺旺、金山文档等等。
1.2.2 如何安装Rosetta
Rosetta 2 仅适用于搭载 Apple 芯片的 Mac 电脑。
首次打开需要 Rosetta 的 App 时,例如阿里旺旺,恒星播放器,金山文档等等,系统会要求您安装 Rosetta。点按“安装”,然后输入您的用户名和密码以允许继续安装。
如果您点按“以后”,则下次打开需要 Rosetta 的 App 时,系统会再次要求您安装 Rosetta。
如果 Rosetta 已经安装,则系统不会再次要求您安装,也就是仅仅需要安装一次。
1.2.3 如何使用Rosetta
您不需要打开 Rosetta 或与这个 App 互动。每当您使用专为搭载 Intel 处理器的 Mac 电脑构建的 App 时,Rosetta 都会在后台自动运行。Rosetta 会转换相应 App,使它可以与 Apple 芯片搭配使用。 对于需要 Rosetta 的 App,在大多数情况下,您不会察觉它的性能有任何不同。不过,您应该联系 App 开发者,以询问相应 App 有没有一个版本能够以原生方式来充分利用 Apple 芯片的功能和性能。
1.2.4 哪些应用需要Rosetta
要识别需要 Rosetta 或者可以使用 Rosetta 的 App,请按照以下步骤操作:
在“访达”中选择一个 App。 从菜单栏的“文件”菜单中,选取“显示简介”。
查看标有“种类”字样的信息: 应用程序 (Intel) 表示 App 仅支持 Intel 处理器,并且需要 Rosetta 才能在搭载 Apple 芯片的 Mac 上运行。例如金山文档、恒星播放器
应用程序(通用)表示 App 既支持 Apple 芯片也支持 Intel 处理器,并且在默认情况下使用 Apple 芯片。通用 App 不需要 Rosetta。
对于标有“应用程序(通用)”的 App,“简介”窗口包含“使用 Rosetta 打开”这项设置。通过这项设置,网页浏览器等通用 App 可以使用还没有更新为支持 Apple 芯片的插件、扩展或其他附加组件。如果某个通用 App 无法识别您为这个 App 安装的附加组件,您可以退出这个 App,选择这项设置,然后再试一次。
应用程序(Apple芯片) 表示App是专门针对Apple芯片开发的,例如例如M1 Max,M1 Ultra,M2 Max,M2 Ultra等等
2. Intel x86 64位架构macOS版Java8开发环境搭建
2.1 Intel x86 64位架构macOS版Java8下载
- 访问Java的官网,其访问地址是https://www.oracle.com/java/
- 点击右上角的Download Java,跳转到Java的下载界面
Java的下载地址是https://www.oracle.com/java/technologies/downloads/
目前(2023/07/12)Oracle官方提供的最新Java版本是Java20和Java17,但是最新的LTS版本是Java17
本次我们下载的是Java8,所以触控板往下滑动到Java8的下载
目前Java8支持四个操作系统
-
Linux
-
macOS
-
Solaris
-
Windows
大家在下载Java8的时候需要根据自己所使用操作系统的版本选择对应版本的Java8
- 选择 macOS版 x64 DMG Installer
如果你的Mac电脑使用的Intel CPU,那么选择macOS版 x64 DMG Installer的jdk-8u371-macosx-x64.dmg
目前Oracle官方提供的macOS版Java8没有原生支持ARM架构的CPU,例如M1 Max,M2 Max等等。
但是M1 Max,M2 Max等等基于ARM架构的CPU可以通过安装Rosetta后使用基于Intel x86 64位 Java8
首先点击jdk-8u371-macosx-x64.dmg,然后勾选许可协议,最后点击 Download jdk-8u371-macosx-x64.dmg
- 注册\登录Oracle账户
如果没有Oracle账户,大家可以在注册页面填写相应的信息注册Oracle账户
账户创建成功以后,在登录页面填写账户信息登录Oracle账户
登录成功之后浏览器会自动下载Java8
当Java8下载完成后 默认在下载目录(/Users/liuguanglei/Downloads)下会看到Java8的安装包jdk-8u371-macosx-x64.dmg
2.2 Intel x86 64位架构macOS版Java8安装
2.2.1 Intel x86 64位架构macOS版Java8安装过程
- 双击Java8安装包jdk-8u371-macosx-x64.dmg
- 双击JDK 8 Update 371.pkg启动安装器
- 点击继续
- 点击安装
安装之前安装器会提示 "安装器"正在尝试安装新软件 使用触控ID或输入密码以允许此次操作
输入密码或者使用TouchID后安装器就会执行安装,安装过程仅需不到1分钟
- 安装完成
安装完成后可以点击后续步骤和关闭
- 后续步骤:跳转到Java8的官方文档
- 关闭:关闭安装向导,完成Java8安装
关闭安装向导时还会提示你要将“JDK 8 Update 371”安装器移到废纸篓吗?,建议点击保留,这样下次重装时不需要重新下载Java8
- 推出桌面的JDK 8 Update 371
选中桌面的JDK 8 Update 371,然后右键推出即可,当然也可以使用快捷键Command+E推出
2.2.2 Intel x86 64位架构macOS版Java8安装目录
默认情况下 Intel x86 64位架构macOS版Java8安装目录是/Library/Java/JavaVirtualMachines/jdk-1.8.jdk
不过我们需要了解的是/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home目录
使用快捷键Command+Shift+G并输入路径/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home后回车
可以快速跳转到/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
作为Java初学者来说,目前只需要关注bin目录和class="lazy" data-src.zip压缩文件
- bin目录:存放Java提供的开发工具,例如javac,java,javap
- class="lazy" data-src.zip:存放Java源代码文件(.java结尾的文件)
可以双击class="lazy" data-src.zip解压后查看,默认解压在下载目录
例如String.java
2.3 Intel x86 64位架构macOS版Java8配置
2.3.1 Intel x86 64位架构macOS版Java8配置说明
当 Intel x86 64位架构macOS版Java8安装完成后,你会发现没有配置PATH环境变量,也可以在终端的任意路径下使用javac和java
没有配置JAVA_HOME环境变量,也可以在终端的maven bin目录(/Users/liuguanglei/Documents/soft/apache-maven-3.9.2/bin**)下使用maven命令**
Q:这样是不是意味着不需要配置Java8的PATH环境变量和JAVA_HOME环境变量?
A:依然需要配置,因为后期我们会使用多个不同版本的JDK,例如在公司开发项目时使用Java8,而学习Java时使用Java17,那么就会有在终端切换Java版本的需求,因此还需要配置Java8的PATH环境变量和JAVA_HOME环境变量。
2.3.2 Intel x86 64位架构macOS版Java8配置JAVA_HOME环境变量
JAVA_HOME指的就是/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home目录
配置JAVA_HOME环境变量的目的就是为了方便配置Java的PATH环境变量以及通过实现修改JAVA_HOME环境变量实现在终端上切换不同版本的Java,例如Java8和Java17相互切换。
- 启动终端
macOS内置终端程序,你可以在程序坞的启动台的其他中找到它
内置终端
不过我使用的是第三方终端iTerm,需要自己手动安装。
使用Command+空格键打开聚焦搜索,然后搜索iTerm并回车
就可以打开iTerm
不过iTerm默认的字体大小只有12,建议改成16
在启动iTerm后,首先点击菜单栏的iTerm>Settings,快捷键是Command+,
在Preferences>Profiles>Text将Font大小由12改成16即可
- 查看系统所使用的Shell类型
不同类型的Shell所使用的配置文件不同,例如zsh使用的.zshrc,而bash使用的.bash_profile。
使用echo $SHELL 命令查看当前系统所使用的Shell类型
macOS Ventura默认使用的zsh
- 创建配置文件
如果你使用的是bash shell,在用户家目录下创建.bash_profile文件
如果你使用的是zsh shell,在用户家目录下创建.zshrc文件
macOS的用户家目录指的就是/Users/liuguanglei,其中liuguanglei表示用户名,每个系统的用户名可能不相同。
当启动终端后默认就是在家目录下,可以使用pwd命令查看当前所在的目录
macOS Ventura使用的Shell是zsh,因此在家目录(/Users/liuguanglei)下使用touch .zshrc命令创建.zshrc文件
文件创建成功后使用 ls -al查看文件
- 在配置文件中添加Java8的JAVA_HOME环境变量配置
首先在终端上使用vim .zshrc命令打开配置文件
此时处于命令模式,无法编辑内容
需要将输入法切换到英文后再按i键进入编辑模式
然后添加如下配置
# 配置Intel x86 64位架构macOS版Java8的JAVA_HOME环境变量export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
JAVA_HOME环境变量配置完成后按esc键退出编辑模式回到命令模式
最后输入:wq并回车保存并退出vim编辑器
- 将配置文件的环境变量加载到shell会话中
source .zshrc 命令将.zshrc配置文件中的环境变量加载到shell会话中
- 验证配置
在终端上输入 echo $JAVA_HOME命令回车后如果能够输出Java8的安装目录/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home 表示JAVA_HOME环境变量配置成功
2.3.3 Intel x86 64位架构macOS版Java8配置PATH环境变量
2.3.3.1 PATH环境变量介绍
PATH环境变量的本质就是一系列路径,例如/bin,/usr/bin,/usr/local/bin等等,多个路径之间使用冒号(:)隔开,macOS下可以在终端上使用echo $PATH查看当前系统的PATH环境变量
PATH环境变量的作用就是在终端上执行命令时,系统会从当前路径和PATH环境变量配置的路径下查找命令对应的可执行程序,然后执行该程序。
例如date命令可以查看系统日期,而where date 可以查看到date命令对应的可执行程序路径,正因为/bin目录在PATH环境变量中,因此在终端输入date命令实际上执行的是/bin目录下的date程序
如果输入一个不存在的命令,那么shell会提示command not found
2.3.3.2 Intel x86 64位架构macOS版Java8配置PATH环境变量
- 启动iTerm终端
如果你之前将iTerm放在Dock栏,点击Dock栏的iTerm图标启动
iTerm终端启动成功
- 打开配置文件
在配置JAVA_HOME环境变量时创建过.zshrc文件,因此使用vim .zshrc命令打开该配置文件即可
打开后可以看到Java8的JAVA_HOME环境变量的配置
- 编辑配置文件
vim打开文件后处于命令模式,也就是只能查看文件内容不能编辑
因此首先切换到英文输入法后按i键进入编辑模式
然后在文件末尾添加如下内容,配置Java8的PATH环境变量
# 配置Intel x86 64位架构macOS版Java8的PATH环境变量export PATH=$PATH:$JAVA_HOME/bin
Java8的PATH环境变量配置完成后按esc退出编辑模式回到命令模式
最后输入:wq回车后保存并退出vim编辑器
- 将配置文件的环境变量加载到shell会话
source .zshrc 命令将.zshrc配置文件中的环境变量加载到shell会话中
- 验证配置
在终端上输入echo $PATH命令查看系统的PATH环境变量中如果包含了Java8的PATH环境变量则表示配置成功
同时也可以在终端的任意路径下使用javac和java
2.4 Intel x86 64位架构macOS版Java8卸载
2.4.1 Intel x86 64位架构macOS版Java8卸载说明
Q:什么时候需要卸载Java8
A:如果不再使用(例如公司项目全部使用Java17开发)Java8时就可以将其卸载
Intel x86 64位架构macOS版Java8的卸载需要删除Java8三个目录
除此以外还要删除环境变量配置文件.zshrc,该配置文件配置了Java8的PATH环境变量和JAVA_HOME环境变量。
2.4.2 删除Java8三个目录
目录 | 说明 |
---|---|
/Library/Java/JavaVirtualMachines/jdk-1.8.jdk | Java8安装目录 |
/Library/Application Support/Oracle/Java | Java8支持目录 |
/Library/PreferencePanes/JavaControlPanel.prefPane | Java8控制面板首选项 |
Java8 控制面板位于系统设置>Java
Java控制面板界面
删除目录需要使用sudo rm -rf命令来完成。首次执行sudo rm -rf前需要输入用户的开机密码
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-1.8.jdk sudo rm -rf /Library/Application\ Support/Oracle/Java sudo rm -rf /Library/PreferencePanes/JavaControlPanel.prefPane
删除完成后系统设置的Java控制面板也会删除
2.4.3 删除Java8环境变量配置文件
使用rm .zshrc命令删除Java8环境变量配置文件.zshrc
删除.zshrc文件后使用快捷键Command+N重新开启终端窗口来验证Java8的JAVA_HOME和PATH环境变量是否删除,
如下图所示左边终端窗口如果不重新开启终端你会发现Java8的JAVA_HOME和PATH环境变量没有删除。右边终端窗口是重新开启的终端窗口验证Java8的JAVA_HOME和PATH环境变量已经删除。
最后在重新开启终端窗口的任意路径上输入javac -version和java -version 查看Java编译器和Java解释器版本信息,如果提示
The operation couldn’t be completed. Unable to locate a Java Runtime. 表示卸载成功
3. ARM64位架构macOS版Java8开发环境搭建
3.1 ARM64位架构macOS版Java8下载
- 访问azul官网,其访问地址是https://www.azul.com/
由于Oracle官方只提供Intel x86 64位CPU macOS版Java8,没有提供针对Apple芯片的Java8
如果想要在Apple芯片的macOS上使用Java8,则可以选择使用第三方(azul)提供的基于Apple芯片的Java8
- 点击右上角Download Now跳转到下载页面
Azul Zulu OpenJDK下载地址 https://www.azul.com/downloads/?package=jdk#zulu
然后触控板往下滑动后,选择基于macOS版ARM 64位Java8并点击Download下载
此时浏览器会自动下载zulu8.70.0.23-ca-jdk8.0.372-macosx_aarch64.dmg
当Java8下载完成后 默认在下载目录(/Users/liuguanglei/Downloads)下会看到Java8的安装包zulu8.70.0.23-ca-jdk8.0.372-macosx_aarch64.dmg
3.2 ARM64位架构macOS版Java8安装
3.2.1 ARM64位架构macOS版Java8安装过程
- 双击zulu8.70.0.23-ca-jdk8.0.372-macosx_aarch64.dmg
- 双击Azul Zulu JDK8.pkg 启动安装器
- 点击继续
- 点击安装
安装之前安装器会提示 "安装器"正在尝试安装新软件 使用触控ID或输入密码以允许此次操作
输入密码或者使用TouchID后安装器就会执行安装,安装过程仅需不到1分钟
- 安装完成
点击关闭按钮可以完成安装,然后会提示你要将“Azul Zulu JDK 8.70.0.23”安装器移到废纸篓吗?
这里建议保留,因为后期可能会因为某些原因需要重新安装,此时不需要再次下载Java8
- 推出桌面Azul Zulu JDK 8.70.0.23
选中桌面的Azul Zulu JDK 8.70.0.23,然后右键 推出 即可,当然也可以使用快捷键Command+E推出
3.2.2 ARM64位架构macOS版Java8安装目录
默认情况下 Intel x86 64位架构macOS版Java8安装目录是/Library/Java/JavaVirtualMachines/zulu-8.jdk
不过我们需要了解的是/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home目录
使用快捷键Command+Shift+G并输入路径/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home后回车
可以快速跳转到/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
作为Java初学者来说,目前只需要关注bin目录和class="lazy" data-src.zip压缩文件
- bin目录:存放Java提供的开发工具,例如javac,java,javap
- class="lazy" data-src.zip:存放Java源代码文件(.java结尾的文件)
可以双击解压后查看,默认解压在下载目录
例如String.java
3.3 ARM64位架构macOS版Java8配置
3.3.1 ARM64位架构macOS版Java8配置说明
当ARM64位架构macOS版Java8安装完成后,你会发现没有配置PATH环境变量,也可以在终端的任意路径下使用javac和java
没有配置JAVA_HOME环境变量,也可以在终端的maven bin目录(/Users/liuguanglei/Documents/soft/apache-maven-3.9.2/bin**)下使用maven命令**
Q:这样是不是意味着不需要配置Java8的PATH环境变量和JAVA_HOME环境变量?
A:依然需要配置,因为后期我们会使用多个不同版本的JDK,例如在公司开发项目时使用Java8,而学习Java时使用Java17,那么就会有在终端切换Java版本的需求,因此还需要配置Java8的PATH环境变量和JAVA_HOME环境变量。
3.3.2 ARM64位架构macOS版Java8配置JAVA_HOME环境变量
JAVA_HOME指的就是/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home目录
配置JAVA_HOME环境变量的目的就是为了方便配置Java的PATH环境变量以及通过实现修改JAVA_HOME环境变量实现在终端上切换不同版本的Java,例如Java8和Java17相互切换。
- 启动iTerm终端
如果你之前将iTerm放在Dock栏,点击Dock栏的iTerm图标启动
iTerm启动成功
- 查看系统所使用的Shell类型
不同类型的Shell所使用的配置文件不同,例如zsh使用的.zshrc,而bash使用的.bash_profile。
使用echo $SHELL 命令查看当前系统所使用的Shell类型
macOS Ventura默认使用的zsh
- 创建配置文件
如果你使用的是bash shell,在用户家目录下创建.bash_profile文件
如果你使用的是zsh shell,在用户家目录下创建.zshrc文件
macOS的用户家目录指的就是/Users/liuguanglei,其中liuguanglei表示用户名,每个系统的用户名可能不相同。
当启动终端后默认就是在家目录下,可以使用pwd命令查看当前所在的目录
macOS Ventura使用的Shell是zsh,因此使用touch .zshrc命令创建.zshrc文件,
文件创建成功后使用 ls -al查看文件
- 在配置文件中添加Java8的JAVA_HOME环境变量配置
首先在终端上使用vim .zshrc命令打开配置文件
此时处于命令模式,无法编辑内容
需要将输入法切换到英文后再按i键切换到编辑模式
然后添加如下配置
# 配置ARM64位架构macOS版Java8的JAVA_HOME环境变量export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
JAVA_HOME环境变量配置完成后按esc键退出编辑模式回到命令模式
最后输入:wq并回车保存并退出vim编辑器
- 将配置文件的环境变量加载到shell会话中
source .zshrc 命令将.zshrc配置文件中的环境变量加载到shell会话中
- 验证配置
在终端上输入 echo $JAVA_HOME命令回车后如果能够输出Java8的安装目录/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home 表示JAVA_HOME环境变量配置成功
3.3.3 ARM64位架构macOS版Java8配置PATH环境变量
3.3.3.1 PATH环境变量介绍
PATH环境变量的本质就是一系列路径,例如/bin,/usr/bin,/usr/local/bin等等,多个路径之间使用冒号(:)隔开,macOS下可以在终端上使用echo $PATH查看当前系统的PATH环境变量
PATH环境变量的作用就是在终端上执行命令时,系统会从当前路径和PATH环境变量配置的路径下查找命令对应的可执行程序,然后执行该程序。
例如date命令可以查看系统日期,而where date 可以查看到date命令对应的可执行程序路径,正因为/bin目录在PATH环境变量中,因此在终端输入date命令实际上执行的是/bin目录下的date程序
如果输入一个不存在的命令,那么shell会提示command not found
3.3.3.2 ARM64位架构macOS版Java8配置PATH环境变量
- 启动iTerm终端
如果你之前将iTerm放在Dock栏,点击Dock栏的iTerm图标启动
iTerm终端启动成功
- 打开配置文件
在配置JAVA_HOME环境变量时创建过.zshrc文件,因此使用vim .zshrc命令打开该配置文件即可
打开后可以看到Java8的JAVA_HOME环境变量的配置
- 编辑配置文件
vim打开文件后处于命令模式,也就是只能查看文件内容不能编辑
因此首先切换到英文输入法后按i键进入编辑模式
然后在文件末尾添加如下内容,配置Java8的PATH环境变量
# 配置ARM64位架构macOS版Java8的PATH环境变量export PATH=$PATH:$JAVA_HOME/bin
Java8的PATH环境变量配置完成后按esc退出编辑模式回到命令模式
最后输入:wq回车后保存并退出vim编辑器
将配置文件的环境变量加载到shell会话
source .zshrc 命令将.zshrc配置文件中的环境变量加载到shell会话中
- 验证配置
在终端上输入echo $PATH命令查看系统的PATH环境变量中如果包含了Java8的PATH环境变量则表示配置成功
同时也可以在终端的任意路径下使用javac和java命令
3.4 ARM64位架构macOS版Java8卸载
3.4.1 ARM64位架构macOS版Java8卸载说明
Q:什么时候需要卸载Java8
A:如果不再使用(例如公司项目全部使用Java17开发)Java8时就可以将其卸载
ARM64位架构macOS版Java8的卸载需要删除Java8安装目录
除此以外还要删除环境变量配置文件.zshrc,该配置文件配置了Java8的PATH环境变量和JAVA_HOME环境变量。
3.4.2 删除Java8安装目录
ARM64位架构macOS版Java8的安装目录是/Library/Java/JavaVirtualMachines/zulu-8.jdk
和Intel x86 64位macOS版Java8不同的是ARM 64位架构macOS版Java8没有控制面板
删除目录需要使用sudo rm -rf命令来完成。首次执行sudo rm -rf前需要输入用户的开机密码
sudo rm -rf /Library/Java/JavaVirtualMachines/zulu-8.jdk
3.4.3 删除Java8环境变量配置文件
使用rm .zshrc命令删除Java8环境变量配置文件.zshrc
删除.zshrc文件后使用快捷键Command+N重新开个终端窗口来验证Java8的JAVA_HOME和PATH环境变量是否删除
如下图所示左边终端窗口如果不重新开启终端你会发现Java8的JAVA_HOME和PATH环境变量没有删除。右边终端窗口是重新开启的终端窗口验证Java8的JAVA_HOME和PATH环境变量已经删除。
最后在终端的任意路径上输入javac -version和java -version 查看Java编译器和Java解释器版本信息,如果提示
The operation couldn’t be completed. Unable to locate a Java Runtime. 表示卸载成功
4. ARM64位架构macOS版Java17开发环境搭建
4.1 ARM64位架构macOS版Java17下载
- 访问Java的官网,其访问地址是https://www.oracle.com/java/
- 点击右上角的Download Java,跳转到Java的下载界面
Java的下载地址是https://www.oracle.com/java/technologies/downloads/
目前(2023/06/28)Oracle官方提供的最新Java版本是Java20和Java17,但是最新的LTS版本是Java17
本次我们下载的是Java17,所以点击JDK17 切换到Java17的下载
目前Java17支持三个操作系统
-
Linux
-
macOS
-
Windows
大家在下载Java17的时候需要根据自己电脑所使用的CPU以及操作系统的版本选择对应版本的Java17
如果版本选择错误就会导致安装不上,例如使用ARM64位架构的M1 Max CPU尝试安装Intel x86 64位Java17则无法安装
选择 macOS版 ARM64 DMG Installer
macOS版JDK17同时支持Intel x86 64位架构和ARM64位架构
如果你的Mac电脑使用的M1\M2系列CPU(例如M1 Max,M2 Max等等),那么选择下载macOS版 ARM64 DMG Installer
下载JDK17时目前不需要同意许可协议以及注册、登录Oracle账号
点击链接https://download.oracle.com/java/17/latest/jdk-17_macos-aarch64_bin.dmg ( sha256)
浏览器会自动下载ARM64位架构macOS版Java17
当Java17下载完成后 默认在下载目录(/Users/liuguanglei/Downloads)下会看到Java17的安装包jdk-17_macos-aarch64_bin.dmg
4.2 ARM64位架构macOS版Java17安装
4.2.1 ARM64位架构macOS版Java17安装过程
- 双击Java17安装包jdk-17_macos-aarch64_bin.dmg
- 双击JDK 17.0.7.pkg启动安装器
- 点击继续
- 点击安装
安装之前安装器会提示 使用触控ID或输入密码以允许此次操作
输入密码或者使用TouchID后安装器就会执行安装,安装过程仅需几秒钟
- 安装完成
安装完成后可以点击Java SE文档和关闭
- Java SE文档:跳转到Java17的官方文档
- 关闭:关闭安装向导,完成Java8安装
关闭安装向导时还会提示你要将“JDK 17.0.7”安装器移到废纸篓吗?,建议点击保留,这样下次重装时不需要重新下载Java17
- 推出桌面的JDK 17.0.7
选中桌面的JDK 17.0.7,然后右键推出即可,当然也可以使用快捷键Command+E推出
4.2.2 ARM64位架构macOS版Java17安装目录
默认情况下ARM64位架构macOS版Java17安装目录是/Library/Java/JavaVirtualMachines/jdk-17.jdk
不过我们需要了解的是/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home目录
Java17安装目录说明
目录 | 说明 |
---|---|
bin | 该目录下主要存放JDK的各种工具命令,例如javac和java |
conf | 该目录下主要存放JDK相关的配置文件 |
include | 该目录下主要存放一些平台的头文件 |
jmods | 该目录下主要存放JDK的各种模块 |
legal | 该目录下主要存放JDK各模块的授权文档 |
lib | 该目录下主要存放JDK工具的一些补充jar包和源代码,Java源码class="lazy" data-src.zip在该目录下 |
作为Java初学者来说,目前只需要关注bin目录和class="lazy" data-src.zip压缩文件
- bin目录:存放Java提供的开发工具,例如javac,java,javap
- class="lazy" data-src.zip:存放Java源代码文件(.java结尾的文件)
可以双击解压后查看,默认解压在下载目录
然后选择java.base
再查看String.java
4.3 ARM64位架构macOS版Java17配置
4.3.1 ARM64位架构macOS版Java17配置说明
当ARM64位架构macOS版Java8安装完成后,你会发现没有配置PATH环境变量,也可以在终端的任意路径下使用javac和java
没有配置JAVA_HOME环境变量,也可以在终端的maven bin目录(/Users/liuguanglei/Documents/soft/apache-maven-3.9.2/bin**)下使用maven命令**
Q:这样是不是意味着不需要配置Java17的PATH环境变量和JAVA_HOME环境变量?
A:依然需要配置,因为后期我们会使用多个不同版本的JDK,例如在公司开发项目时使用Java8,而学习Java时使用Java17,那么就会有在终端切换Java版本的需求,因此还需要配置Java17的PATH环境变量和JAVA_HOME环境变量。
4.3.2 ARM64位架构macOS版Java17配置JAVA_HOME环境变量
JAVA_HOME指的就是/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home目录
配置JAVA_HOME环境变量的目的就是为了方便配置Java的PATH环境变量以及通过实现修改JAVA_HOME环境变量实现在终端上切换不同版本的Java,例如Java8和Java17相互切换。
- 启动iTerm终端
如果你之前将iTerm放在Dock栏,点击Dock栏的iTerm图标启动
iTerm启动成功
- 查看系统所使用的Shell类型
不同类型的Shell所使用的配置文件不同,例如zsh使用的.zshrc,而bash使用的.bash_profile。
使用echo $SHELL 命令查看当前系统所使用的Shell类型
macOS Ventura默认使用的zsh
- 创建配置文件
如果你使用的是bash shell,在用户家目录下创建.bash_profile文件
如果你使用的是zsh shell,在用户家目录下创建.zshrc文件
macOS的用户家目录指的就是/Users/liuguanglei,其中liuguanglei表示用户名,每个系统的用户名可能不相同。
当启动终端后默认就是在家目录下,可以使用pwd命令查看当前所在的目录
macOS Ventura使用的Shell是zsh,因此使用touch .zshrc命令创建.zshrc文件
文件创建成功后使用 ls -al查看文件
- 在配置文件中添加Java17的JAVA_HOME环境变量配置
首先在终端上使用vim .zshrc命令打开配置文件
此时处于命令模式,无法编辑内容
需要将输入法切换到英文后再按i键切换到编辑模式
然后添加如下配置
#配置基于ARM64位架构macOS版Java17的JAVA_HOME环境变量export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
JAVA_HOME环境变量配置完成后按esc键退出编辑模式回到命令模式
最后输入:wq并回车保存并退出vim编辑器
- 将配置文件的环境变量加载到shell会话中
source .zshrc 命令将.zshrc配置文件中的环境变量加载到shell会话中
- 验证配置
在终端上输入 echo $JAVA_HOME命令回车后如果能够输出Java17的安装目录/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home表示JAVA_HOME环境变量配置成功
4.3.3 ARM64位架构macOS版Java17配置PATH环境变量
4.3.3.1 PATH环境变量介绍
PATH环境变量的本质就是一系列路径,例如/bin,/usr/bin,/usr/local/bin等等,多个路径之间使用冒号(:)隔开,macOS下可以在终端上使用echo $PATH查看当前系统的PATH环境变量
PATH环境变量的作用就是在终端上执行命令时,系统会从当前路径和PATH环境变量配置的路径下查找命令对应的可执行程序,然后执行该程序。
例如date命令可以查看系统日期,而where date 可以查看到date命令对应的可执行程序路径,正因为/bin目录在PATH环境变量中,因此在终端输入date命令实际上执行的是/bin目录下的date程序
如果输入一个不存在的命令,那么shell会提示command not found
4.3.3.2 ARM64位架构macOS版Java17配置PATH环境变量
- 启动iTerm终端
如果你之前将iTerm放在Dock栏,点击Dock栏的iTerm图标启动
iTerm启动成功
- 打开配置文件
在配置JAVA_HOME环境变量时创建过.zshrc文件,因此使用vim .zshrc命令打开该配置文件即可
打开后可以看到Java17的JAVA_HOME环境变量的配置
- 编辑配置文件
vim打开文件后处于命令模式,也就是只能查看文件内容不能编辑
因此首先切换到英文输入法后按i键切换到编辑模式
然后在文件末尾添加Java17 PATH环境变量的配置
# 配置基于ARM64位架构macOS版Java17的PATH环境变量export PATH=$PATH:$JAVA_HOME/bin
Java17的PATH环境变量配置完成后按esc退出编辑模式回到命令模式
最后输入:wq回车后保存并退出vim编辑器
- 将配置文件的环境变量加载到shell会话
source .zshrc 命令将.zshrc配置文件中的环境变量加载到shell会话中
- 验证配置
在终端上输入echo $PATH命令查看系统的PATH环境变量中如果包含了Java17的PATH环境变量则表示配置成功
同时也可以在终端的任意路径下使用javac和java
4.4 ARM64位架构macOS版Java17卸载
4.4.1 ARM64位架构macOS版Java17卸载说明
Q:什么时候需要卸载Java17
A:如果不再使用(例如公司项目全部使用Java21开发)Java17时就可以将其卸载
ARM64位架构macOS版Java17的卸载需要删除Java17安装目录
除此以外还要删除环境变量配置文件.zshrc,该配置文件配置了Java17的PATH环境变量和JAVA_HOME环境变量。
4.4.2 删除Java17安装目录
ARM64位架构macOS版Java17的安装目录是/Library/Java/JavaVirtualMachines/jdk-17.jdk
删除目录需要使用sudo rm -rf命令来完成。首次执行sudo rm -rf前需要输入用户的开机密码
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-17.jdk
4.4.3 删除Java17环境变量配置文件
使用rm .zshrc命令删除Java17环境变量配置文件.zshrc
删除.zshrc文件后使用快捷键Command+N 重新开个终端窗口来验证Java8的JAVA_HOME和PATH环境变量是否删除
如下图所示左边终端窗口如果不重新开启终端你会发现Java8的JAVA_HOME和PATH环境变量没有删除。右边终端窗口是重新开启的终端窗口验证Java8的JAVA_HOME和PATH环境变量已经删除。
最后在终端的任意路径上输入javac -version和java -version 查看Java编译器和Java解释器版本信息,如果提示
The operation couldn’t be completed. Unable to locate a Java Runtime. 表示卸载成功
4.5 ARM64位架构macOS版Java17和Java8相互切换
4.5.1 如何实现Java17和Java8切换
由于开发项目时使用Java8,但是学习JDK新特性时安装了Java17,因此此时机器上同时存在两个不同版本的JDK,分别是第三方Java8和Oracle官方Java17。
那么如何在这两个版本中间切换?
首先需要知道当前使用的Java版本
在终端的任意路径通过javac -version和java -version得知目前使用的是Java17
为什么是Java17?
使用cat .zshrc命令查看环境变量配置文件.zshrc内容得知JAVA_HOME环境变量的值是Java17的安装路径,而JDK的Path环境变量引用了JAVA_HOME环境
#配置基于ARM64位架构macOS版Java17的JAVA_HOME环境变量export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home# 配置基于ARM64位架构macOS版Java17的PATH环境变量export PATH=$PATH:$JAVA_HOME/bin
那么想要实现Java8和Java17相互切换,只需要修改JAVA_HOME环境变量值即可
4.5.2 ARM64位架构macOS版Java17切换到Java8
- 启动终端
- 打开环境变量配置文件
使用vim .zshrc命令打开环境变量配置文件
打开后看到Java17相关的环境变量配置
#配置基于ARM64位架构macOS版Java17的JAVA_HOME环境变量export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home# 配置基于ARM64位架构macOS版Java17的PATH环境变量export PATH=$PATH:$JAVA_HOME/bin
- 修改环境变量配置文件
在命令模式下按dd删除Java17相关环境变量配置,dd每次删除一行
然后按i键从命令模式切换到编辑模式
然后添加Java8的环境变量配置
#配置基于ARM64位架构macOS版Java8的JAVA_HOME环境变量export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home#配置基于ARM64位架构macOS版Java8的PATH环境变量export PATH=$PATH:$JAVA_HOME/bin
添加完成后按esc退出编辑模式回到命令模式
最后输入:wq并回车保存并退出vim编辑器
- 将配置文件的环境变量加载到shell会话
source .zshrc 命令将.zshrc配置文件中的环境变量加载到shell会话中
- 验证配置
在终端的任意路径下输入javac -version和java -version,查看输出的版本信息如果是Java8,那么就意味着成功从Java17切换到Java8
4.5.3 ARM64位架构macOS版Java8切换到Java17
- 启动终端
- 打开环境变量配置文件
使用vim .zshrc命令打开环境变量配置文件
打开后看到Java8相关的环境变量配置
#配置基于ARM64位架构macOS版Java8的JAVA_HOME环境变量export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home#配置基于ARM64位架构macOS版Java8的PATH环境变量export PATH=$PATH:$JAVA_HOME/bin
修改环境变量配置文件
在命令模式下按dd删除Java8相关环境变量配置,dd每次删除一行
然后按i键从命令模式切换到编辑模式
然后添加Java17相关的环境变量配置
#配置基于ARM64位架构macOS版Java17的JAVA_HOME环境变量export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home# 配置基于ARM64位架构macOS版Java17的PATH环境变量export PATH=$PATH:$JAVA_HOME/bin
Java17相关的环境变量配置完成后按esc退出编辑模式回到命令模式
最后输入:wq回车保存并退出vim编辑器
将配置文件的环境变量加载到shell会话
source .zshrc 命令将.zshrc配置文件中的环境变量加载到shell会话中
- 验证配置
在终端的任意路径下输入javac -version和java -version,查看输出的版本信息如果是Java17,那么就意味着从Java8成功切换到Java17
5. macOS版第一个Java程序开发
5.1 Java程序的开发流程
-
编写:使用Java开发工具编写源文件,源文件以.java结尾,用于存储Java代码
-
编译:使用javac把源文件编译生成字节码文件,字节码文件以.class结尾,字节码文件名和类名相同,字节码文件的数量和源文件中class的数量相同,编译的格式是javac 源文件名.java,例如javac HelloWorld.java
-
运行:使用java解释运行编译生成后的字节码文件,运行的格式是java 字节码文件名(不需要.class后缀),例如java HelloWorld
5.2 Java开发工具介绍
虽然JDK提供了开发Java程序时所用到的一些工具,例如javac,java,javap,jconsole等等
但是JDK并没有提供编写Java代码的开发工具,因此想要在编写Java程序之前,还需要了解Java开发工具, 我这里把Java开发工具分成两类,分别是文本编辑器和IDE
-
文本编辑器
Visual Studio Code和Sublime Text都是高级的文本编辑器,而且是跨平台的(Windows,macOS,Linux),建议初学Java的朋友可以使用它们来开发Java程序,因为相比IDE而言更加轻量级,对初学者更加容易上手。
-
IDE(Integrated Development Environment)
IDEA和Eclipse都是IDE,IDE集成项目开发中常用的功能,包括编辑器、编译工具、反编译工具、测试工具、性能分析工具、部署工具等等,因此可以大大提高开发效率。
目前大部分互联网公司基本普遍都会使用IntelliJ IDEA开发Java项目,因此我们后期会全程使用IntelliJ IDEA。
如果你还在上大学而且刚好学的计算机专业,那么大概率你的Java老师教你使用的Eclipse。
5.3 第一个Java程序开发
在学习任何一门编程语言时编写的第一个程序通常都称为HelloWorld
如果你能够编写并且运行HelloWorld,那么意味着已经迈入编程的大门
本次我们使用比较原始的开发方式:也就是基于文本编辑+iTerm终端+JDK提供的开发工具(javac和java)来开发人生的第一个Java程序,这种方式虽然和使用IDE开发相比效率比较低,但是能够让初学者更加直观地理解Java程序的开发和运行流程。
- 新建code文件夹
在/Users/Documents目录下,鼠标右键新建文件夹
将文件夹的名称改为code,用于存放Java源文件
- 新建Java源文件
首先在code目录下右键 新建文件>Text
不过macOS Ventura右键没有新建文件菜单,需要使用第三方软件实现,例如右键助手专业版
右键助手专业版
右键助手安装完成后,就可以选择右键新建文件>Text
这样就会创建一个文本文件,文件名是未命名.txt
然后将默认的未命名.txt重命名成HelloWorld.java
访达还会提示 你确定要将扩展名“.txt”更改为“.java”吗?,点击使用.java
这样HelloWorld.java源文件就创建成功
- 编辑源文件
选中HelloWorld.java,右键 打开方式>文本编辑.app打开
文本编辑打开HelloWorld.java源文件,打开后就可以开始编写Java代码
然后在HelloWorld.java源文件中编写HelloWorld
public class HelloWorld{ public static void main(String[]args){ System.out.println("Hello World"); } }
在使用文本编辑编写Java代码时
-
如果觉得代码字体太小,可以按住Ctrl键,然后向上滚动鼠标放大字体
-
代码需要进行适当的缩进
-
代码中遇到了符号,比如说圆括号(()),方括号([]),大括号({})都需要成对编写,然后再往里面编写内容,而且这些符号都是英文的,因为Java是美国人发明的,不支持中文。
编写完成后按Command+s保存
- 编译源文件
首先需要开启iTerm终端,因为javac和java只能在终端上使用
然后使用cd Documents/code命令切换到源文件所在的目录(/Users/liuguanglei/Documents/code)
pwd命令可以查看当前所在的目录
然后输入javac HelloWorld.java并回车 编译源文件
如果没有语法错误编译成功之后会生成HelloWorld.class文件
- 解释运行字节码文件
在终端上输入java HelloWorld后回车解释执行HelloWorld.class字节码文件
如果没有任何运行时错误就会看到Windows终端打印输出HelloWorld并换行
5.4 第一个Java程序详解
public class HelloWorld{ public static void main(String[]args){ System.out.println("Hello World"); } }
-
public是一个关键字,表示权限最大的访问权限修饰符,称为公共的,后期在学习面向对象的时候还会学习private,默认的,protected,这里只需要记住如果类名使用public 修饰,那么public修饰的类名必须和文件名保持一致。
-
class是一个关键字,用于定义类,例如class Welcome{} 表示定义一个类,类名是Welcome,{}表示类的开始范围和结束范围,Java是面向对象的编程语言,类是Java程序的基本单元。
-
在一个源文件中可以定义多个class,但是只能有一个类被public修饰。编译器在编译后会生成和源文件中class数量一致的字节码文件,字节码文件名和类名相同。
public class World{public static void main(String[] args){System.out.println("HelloWorld");}}class Chinese{}class American{}
编译和运行World.java程序
-
public static void main(String[] args){} 格式是固定的,表示main方法,main方法是Java程序的入口,Java程序是从main方法的第一行开始执行的,该方法被JVM调用,如果你的Java程序想要独立运行,那么必须要固定格式的main方法
-
System.out.println("HelloWorld "); 的作用就是在终端上打印输出字符串HelloWorld 然后并换行,如果想输出其他内容只需要替换"HelloWorld"即可,;表示语句的结束,Java中的每条语句(例如System.out.println()就是打印输出语句)都需要使用;结束,否则编译错误。如果打印输出后不想换行可以使用System.out.print();语句
public class PrintData{ public static void main(String[]args){ System.out.println("HelloWorld"); System.out.print("跟光磊学Java"); System.out.print("从小白"); System.out.print("到架构师"); } }
编译和运行PrintData.java程序
需要注意的是最后一句打印输出语句末尾添加了%
这是因为如果你的最后输出不是换行,zsh 就会在最后帮你加一个反色的%,然后强制换行。这样的好处是下一个命令总是从头开始的,不容易混乱。
程序中打印的内容包含了中文,但是源文件编码使用UTF-8,而iTerm终端默认使用UTF-8编码, 因此在使用javac编译时不需要使用 -encoding UTF-8选项。
5.5 Java跨平台原理
Java跨平台指的是在Windows系统上开发的Java程序编译之后的字节码文件可以在任意安装了JDK的其他操作系统上运行。
Java跨平台的原理就是Java程序不是直接在操作系统上运行的,而是在JVM(Java Virtual Machine)上运行。JVM屏蔽底层操作系统差异性,但是JVM本身不是跨平台。
在搭建Windows版和macOS版Java开发环境时都需要根据自己所使用操作系统的版本来选择安装、配置对应版本的JDK
而JDK包含JRE和开发工具,JRE包含JVM和核心类库,Oracle公司需要根据不同的操作系统开发不同版本的JDK
现在就来使用之前编写的HelloWorld程序演示Java跨平台
需要说明的是前提条件是Windows和macOS两个系统需要安装、配置JDK,Java8或者Java17都可以。
- 在Windows上编写HelloWorld.java源文件
public class HelloWorld{public static void main(String[]args){System.out.println("跟光磊学Java从小白到架构师");}}
- 在Windows终端上使用javac编译HelloWorld.java源文件,生成字节码文件
- 在macOS iTerm终端上使用java解释运行字节码文件
来源地址:https://blog.csdn.net/Tony_CTO/article/details/131863195
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341