macOS版Java開發環境搭建

image

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點擊左上角的蘋果菜單,然後選擇關於本機

image

在彈出的macOS Ventura概覽窗口中看到芯片是Apple開頭的就是ARM架構

image

在彈出的macOS Montery概覽窗口中看到芯片包含Intel就是 Intel x86架構

image

正是因爲兩種不同的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。點按“安裝”,然後輸入您的用戶名和密碼以允許繼續安裝。

image

image

如果您點按“以後”,則下次打開需要 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。 從菜單欄的“文件”菜單中,選取“顯示簡介”。

image

查看標有“種類”字樣的信息: 應用程序 (Intel) 表示 App 僅支持 Intel 處理器,並且需要 Rosetta 才能在搭載 Apple 芯片的 Mac 上運行。例如金山文檔、恆星播放器

image

image

image

應用程序(通用)表示 App 既支持 Apple 芯片也支持 Intel 處理器,並且在默認情況下使用 Apple 芯片。通用 App 不需要 Rosetta。

對於標有“應用程序(通用)”的 App,“簡介”窗口包含“使用 Rosetta 打開”這項設置。通過這項設置,網頁瀏覽器等通用 App 可以使用還沒有更新爲支持 Apple 芯片的插件、擴展或其他附加組件。如果某個通用 App 無法識別您爲這個 App 安裝的附加組件,您可以退出這個 App,選擇這項設置,然後再試一次。

image

image

應用程序(Apple芯片) 表示App是專門針對Apple芯片開發的,例如例如M1 Max,M1 Ultra,M2 Max,M2 Ultra等等

image

image

2. Intel x86 64位架構macOS版Java8開發環境搭建

2.1 Intel x86 64位架構macOS版Java8下載

  1. 訪問Java的官網,其訪問地址是https://www.oracle.com/java/

image

  1. 點擊右上角的Download Java,跳轉到Java的下載界面

image

Java的下載地址是https://www.oracle.com/java/technologies/downloads/

image

目前(2023/07/12)Oracle官方提供的最新Java版本是Java20和Java17,但是最新的LTS版本是Java17

本次我們下載的是Java8,所以觸控板往下滑動到Java8的下載

image

目前Java8支持四個操作系統

  1. Linux

  2. macOS

  3. Solaris

  4. Windows

大家在下載Java8的時候需要根據自己所使用操作系統的版本選擇對應版本的Java8

image

  1. 選擇 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

image

4.下載jdk-8u371-macosx-x64.dmg

首先點擊jdk-8u371-macosx-x64.dmg,然後勾選許可協議,最後點擊 Download jdk-8u371-macosx-x64.dmg

image

  1. 註冊\登錄Oracle賬戶

如果沒有Oracle賬戶,大家可以在註冊頁面填寫相應的信息註冊Oracle賬戶

image

賬戶創建成功以後,在登錄頁面填寫賬戶信息登錄Oracle賬戶

登錄成功之後瀏覽器會自動下載Java8

當Java8下載完成後 默認在下載目錄(/Users/liuguanglei/Downloads)下會看到Java8的安裝包jdk-8u371-macosx-x64.dmg

image

2.2 Intel x86 64位架構macOS版Java8安裝

2.2.1 Intel x86 64位架構macOS版Java8安裝過程

  1. 雙擊Java8安裝包jdk-8u371-macosx-x64.dmg

image

  1. 雙擊JDK 8 Update 371.pkg啓動安裝器

image

  1. 點擊繼續

  1. 點擊安裝

image

安裝之前安裝器會提示 "安裝器"正在嘗試安裝新軟件 使用觸控ID或輸入密碼以允許此次操作

image

輸入密碼或者使用TouchID後安裝器就會執行安裝,安裝過程僅需不到1分鐘

image

  1. 安裝完成

image

安裝完成後可以點擊後續步驟和關閉

image

  • 關閉:關閉安裝嚮導,完成Java8安裝

關閉安裝嚮導時還會提示你要將“JDK 8 Update 371”安裝器移到廢紙簍嗎?,建議點擊保留,這樣下次重裝時不需要重新下載Java8

image

  1. 推出桌面的JDK 8 Update 371

選中桌面的JDK 8 Update 371,然後右鍵推出即可,當然也可以使用快捷鍵Command+E推出

image

2.2.2 Intel x86 64位架構macOS版Java8安裝目錄

默認情況下 Intel x86 64位架構macOS版Java8安裝目錄是/Library/Java/JavaVirtualMachines/jdk-1.8.jdk

image

不過我們需要了解的是/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home目錄

image

使用快捷鍵Command+Shift+G並輸入路徑/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home後回車

image

可以快速跳轉到/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home

作爲Java初學者來說,目前只需要關注bin目錄和src.zip壓縮文件

  • bin目錄:存放Java提供的開發工具,例如javac,java,javap

image

  • src.zip:存放Java源代碼文件(.java結尾的文件)

image

可以雙擊src.zip解壓後查看,默認解壓在下載目錄

例如String.java

image

2.3 Intel x86 64位架構macOS版Java8配置

2.3.1 Intel x86 64位架構macOS版Java8配置說明

當 Intel x86 64位架構macOS版Java8安裝完成後,你會發現沒有配置PATH環境變量,也可以在終端的任意路徑下使用javac和java

image

沒有配置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相互切換。

  1. 啓動終端

macOS內置終端程序,你可以在程序塢的啓動臺的其他中找到它

image

內置終端

image

不過我使用的是第三方終端iTerm,需要自己手動安裝。

使用Command+空格鍵打開聚焦搜索,然後搜索iTerm並回車

就可以打開iTerm

image

不過iTerm默認的字體大小隻有12,建議改成16

在啓動iTerm後,首先點擊菜單欄的iTerm>Settings,快捷鍵是Command+,

image

在Preferences>Profiles>Text將Font大小由12改成16即可

image

  1. 查看系統所使用的Shell類型

不同類型的Shell所使用的配置文件不同,例如zsh使用的.zshrc,而bash使用的.bash_profile。

使用echo $SHELL 命令查看當前系統所使用的Shell類型

macOS Ventura默認使用的zsh

image

  1. 創建配置文件

如果你使用的是bash shell,在用戶家目錄下創建.bash_profile文件

如果你使用的是zsh shell,在用戶家目錄下創建.zshrc文件

macOS的用戶家目錄指的就是/Users/liuguanglei,其中liuguanglei表示用戶名,每個系統的用戶名可能不相同。

當啓動終端後默認就是在家目錄下,可以使用pwd命令查看當前所在的目錄

macOS Ventura使用的Shell是zsh,因此在家目錄(/Users/liuguanglei)下使用touch .zshrc命令創建.zshrc文件

文件創建成功後使用 ls -al查看文件

image

  1. 在配置文件中添加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

image

JAVA_HOME環境變量配置完成後按esc鍵退出編輯模式回到命令模式

最後輸入:wq並回車保存並退出vim編輯器

image

  1. 將配置文件的環境變量加載到shell會話中

source .zshrc 命令將.zshrc配置文件中的環境變量加載到shell會話中

image

  1. 驗證配置

在終端上輸入 echo $JAVA_HOME命令回車後如果能夠輸出Java8的安裝目錄/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home 表示JAVA_HOME環境變量配置成功

image

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環境變量

image

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環境變量

  1. 啓動iTerm終端

如果你之前將iTerm放在Dock欄,點擊Dock欄的iTerm圖標啓動

image

iTerm終端啓動成功

  1. 打開配置文件

在配置JAVA_HOME環境變量時創建過.zshrc文件,因此使用vim .zshrc命令打開該配置文件即可

打開後可以看到Java8的JAVA_HOME環境變量的配置

image

  1. 編輯配置文件

vim打開文件後處於命令模式,也就是隻能查看文件內容不能編輯

因此首先切換到英文輸入法後按i鍵進入編輯模式

然後在文件末尾添加如下內容,配置Java8的PATH環境變量

# 配置Intel x86 64位架構macOS版Java8的PATH環境變量
export PATH=$PATH:$JAVA_HOME/bin

Java8的PATH環境變量配置完成後按esc退出編輯模式回到命令模式

最後輸入:wq回車後保存並退出vim編輯器

image

image

  1. 將配置文件的環境變量加載到shell會話

source .zshrc 命令將.zshrc配置文件中的環境變量加載到shell會話中

image

  1. 驗證配置

在終端上輸入echo $PATH命令查看系統的PATH環境變量中如果包含了Java8的PATH環境變量則表示配置成功

image

同時也可以在終端的任意路徑下使用javac和java

image

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.jdkJava8安裝目錄
/Library/Application Support/Oracle/JavaJava8支持目錄
/Library/PreferencePanes/JavaControlPanel.prefPaneJava8控制面板首選項

Java8 控制面板位於系統設置>Java

image

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控制面板也會刪除

image

2.4.3 刪除Java8環境變量配置文件

使用rm .zshrc命令刪除Java8環境變量配置文件.zshrc

image

刪除.zshrc文件後使用快捷鍵Command+N重新開啓終端窗口來驗證Java8的JAVA_HOME和PATH環境變量是否刪除,

如下圖所示左邊終端窗口如果不重新開啓終端你會發現Java8的JAVA_HOME和PATH環境變量沒有刪除。右邊終端窗口是重新開啓的終端窗口驗證Java8的JAVA_HOME和PATH環境變量已經刪除。

image

最後在重新開啓終端窗口的任意路徑上輸入javac -version和java -version 查看Java編譯器和Java解釋器版本信息,如果提示

The operation couldn’t be completed. Unable to locate a Java Runtime. 表示卸載成功

image

3. ARM64位架構macOS版Java8開發環境搭建

3.1 ARM64位架構macOS版Java8下載

  1. 訪問azul官網,其訪問地址是https://www.azul.com/

由於Oracle官方只提供Intel x86 64位CPU macOS版Java8,沒有提供針對Apple芯片的Java8

image

如果想要在Apple芯片的macOS上使用Java8,則可以選擇使用第三方(azul)提供的基於Apple芯片的Java8

azul官網

image

  1. 點擊右上角Download Now跳轉到下載頁面

image

Azul Zulu OpenJDK下載地址 https://www.azul.com/downloads/?package=jdk#zulu

然後觸控板往下滑動後,選擇基於macOS版ARM 64位Java8並點擊Download下載

image

此時瀏覽器會自動下載zulu8.70.0.23-ca-jdk8.0.372-macosx_aarch64.dmg

image

當Java8下載完成後 默認在下載目錄(/Users/liuguanglei/Downloads)下會看到Java8的安裝包zulu8.70.0.23-ca-jdk8.0.372-macosx_aarch64.dmg

image

3.2 ARM64位架構macOS版Java8安裝

3.2.1 ARM64位架構macOS版Java8安裝過程

  1. 雙擊zulu8.70.0.23-ca-jdk8.0.372-macosx_aarch64.dmg

image

image

  1. 雙擊Azul Zulu JDK8.pkg 啓動安裝器

image

image

  1. 點擊繼續

image

  1. 點擊安裝

安裝之前安裝器會提示 "安裝器"正在嘗試安裝新軟件 使用觸控ID或輸入密碼以允許此次操作

image

輸入密碼或者使用TouchID後安裝器就會執行安裝,安裝過程僅需不到1分鐘image

imageimage

image

  1. 安裝完成

image

點擊關閉按鈕可以完成安裝,然後會提示你要將“Azul Zulu JDK 8.70.0.23”安裝器移到廢紙簍嗎?

這裏建議保留,因爲後期可能會因爲某些原因需要重新安裝,此時不需要再次下載Java8

image

  1. 推出桌面Azul Zulu JDK 8.70.0.23

選中桌面的Azul Zulu JDK 8.70.0.23,然後右鍵 推出 即可,當然也可以使用快捷鍵Command+E推出

image

3.2.2 ARM64位架構macOS版Java8安裝目錄

默認情況下 Intel x86 64位架構macOS版Java8安裝目錄是/Library/Java/JavaVirtualMachines/zulu-8.jdk

image

不過我們需要了解的是/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home目錄

使用快捷鍵Command+Shift+G並輸入路徑/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home後回車

image

可以快速跳轉到/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home

image

作爲Java初學者來說,目前只需要關注bin目錄和src.zip壓縮文件

  • bin目錄:存放Java提供的開發工具,例如javac,java,javap

image

  • src.zip:存放Java源代碼文件(.java結尾的文件)

image

可以雙擊解壓後查看,默認解壓在下載目錄

image

例如String.java

image

3.3 ARM64位架構macOS版Java8配置

3.3.1 ARM64位架構macOS版Java8配置說明

當ARM64位架構macOS版Java8安裝完成後,你會發現沒有配置PATH環境變量,也可以在終端的任意路徑下使用javac和java

image

沒有配置JAVA_HOME環境變量,也可以在終端的maven bin目錄(/Users/liuguanglei/Documents/soft/apache-maven-3.9.2/bin**)下使用maven命令**

image

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目錄

image

配置JAVA_HOME環境變量的目的就是爲了方便配置Java的PATH環境變量以及通過實現修改JAVA_HOME環境變量實現在終端上切換不同版本的Java,例如Java8和Java17相互切換

  1. 啓動iTerm終端

如果你之前將iTerm放在Dock欄,點擊Dock欄的iTerm圖標啓動

image

iTerm啓動成功

image

  1. 查看系統所使用的Shell類型

不同類型的Shell所使用的配置文件不同,例如zsh使用的.zshrc,而bash使用的.bash_profile。

使用echo $SHELL 命令查看當前系統所使用的Shell類型

macOS Ventura默認使用的zsh

image

  1. 創建配置文件

如果你使用的是bash shell,在用戶家目錄下創建.bash_profile文件

如果你使用的是zsh shell,在用戶家目錄下創建.zshrc文件

macOS的用戶家目錄指的就是/Users/liuguanglei,其中liuguanglei表示用戶名,每個系統的用戶名可能不相同。

當啓動終端後默認就是在家目錄下,可以使用pwd命令查看當前所在的目錄

image

macOS Ventura使用的Shell是zsh,因此使用touch .zshrc命令創建.zshrc文件,

image

文件創建成功後使用 ls -al查看文件

image

  1. 在配置文件中添加Java8的JAVA_HOME環境變量配置

首先在終端上使用vim .zshrc命令打開配置文件

image

此時處於命令模式,無法編輯內容

image

需要將輸入法切換到英文後再按i鍵切換到編輯模式

image

然後添加如下配置

# 配置ARM64位架構macOS版Java8的JAVA_HOME環境變量
export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home

image

JAVA_HOME環境變量配置完成後按esc鍵退出編輯模式回到命令模式

image

最後輸入:wq並回車保存並退出vim編輯器

image

  1. 將配置文件的環境變量加載到shell會話中

source .zshrc 命令將.zshrc配置文件中的環境變量加載到shell會話中

image

  1. 驗證配置

在終端上輸入 echo $JAVA_HOME命令回車後如果能夠輸出Java8的安裝目錄/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home 表示JAVA_HOME環境變量配置成功

image

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

image

3.3.3.2 ARM64位架構macOS版Java8配置PATH環境變量

  1. 啓動iTerm終端

如果你之前將iTerm放在Dock欄,點擊Dock欄的iTerm圖標啓動

image

iTerm終端啓動成功

image

  1. 打開配置文件

在配置JAVA_HOME環境變量時創建過.zshrc文件,因此使用vim .zshrc命令打開該配置文件即可

image

打開後可以看到Java8的JAVA_HOME環境變量的配置

image

  1. 編輯配置文件

vim打開文件後處於命令模式,也就是隻能查看文件內容不能編輯

因此首先切換到英文輸入法後按i鍵進入編輯模式

image

然後在文件末尾添加如下內容,配置Java8的PATH環境變量

# 配置ARM64位架構macOS版Java8的PATH環境變量
export PATH=$PATH:$JAVA_HOME/bin

image

Java8的PATH環境變量配置完成後按esc退出編輯模式回到命令模式

image

最後輸入:wq回車後保存並退出vim編輯器

image

4.將配置文件的環境變量加載到shell會話

source .zshrc 命令將.zshrc配置文件中的環境變量加載到shell會話中

image

  1. 驗證配置

在終端上輸入echo $PATH命令查看系統的PATH環境變量中如果包含了Java8的PATH環境變量則表示配置成功

image

同時也可以在終端的任意路徑下使用javac和java命令

image

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

image

和Intel x86 64位macOS版Java8不同的是ARM 64位架構macOS版Java8沒有控制面板

image

刪除目錄需要使用sudo rm -rf命令來完成。首次執行sudo rm -rf前需要輸入用戶的開機密碼

sudo rm -rf /Library/Java/JavaVirtualMachines/zulu-8.jdk

image

3.4.3 刪除Java8環境變量配置文件

使用rm .zshrc命令刪除Java8環境變量配置文件.zshrc

image

刪除.zshrc文件後使用快捷鍵Command+N重新開個終端窗口來驗證Java8的JAVA_HOME和PATH環境變量是否刪除

如下圖所示左邊終端窗口如果不重新開啓終端你會發現Java8的JAVA_HOME和PATH環境變量沒有刪除。右邊終端窗口是重新開啓的終端窗口驗證Java8的JAVA_HOME和PATH環境變量已經刪除。

image

最後在終端的任意路徑上輸入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下載

  1. 訪問Java的官網,其訪問地址是https://www.oracle.com/java/

  1. 點擊右上角的Download Java,跳轉到Java的下載界面

image

Java的下載地址是https://www.oracle.com/java/technologies/downloads/

image

目前(2023/06/28)Oracle官方提供的最新Java版本是Java20和Java17,但是最新的LTS版本是Java17

本次我們下載的是Java17,所以點擊JDK17 切換到Java17的下載

目前Java17支持三個操作系統

  1. Linux

  2. macOS

  3. Windows

大家在下載Java17的時候需要根據自己電腦所使用的CPU以及操作系統的版本選擇對應版本的Java17

image

如果版本選擇錯誤就會導致安裝不上,例如使用ARM64位架構的M1 Max CPU嘗試安裝Intel x86 64位Java17則無法安裝

3.選擇 macOS版 ARM64 DMG Installer

macOS版JDK17同時支持Intel x86 64位架構和ARM64位架構

image

如果你的Mac電腦使用的M1\M2系列CPU(例如M1 Max,M2 Max等等),那麼選擇下載macOS版 ARM64 DMG Installer

image

  1. 下載jdk-17_macos-aarch64_bin.dmg

下載JDK17時目前不需要同意許可協議以及註冊、登錄Oracle賬號

點擊鏈接https://download.oracle.com/java/17/latest/jdk-17_macos-aarch64_bin.dmg ( sha256)

image

瀏覽器會自動下載ARM64位架構macOS版Java17

image

當Java17下載完成後 默認在下載目錄(/Users/liuguanglei/Downloads)下會看到Java17的安裝包jdk-17_macos-aarch64_bin.dmg

image

4.2 ARM64位架構macOS版Java17安裝

4.2.1 ARM64位架構macOS版Java17安裝過程

  1. 雙擊Java17安裝包jdk-17_macos-aarch64_bin.dmg

image

image

  1. 雙擊JDK 17.0.7.pkg啓動安裝器

image

  1. 點擊繼續

image

  1. 點擊安裝

image

安裝之前安裝器會提示 使用觸控ID或輸入密碼以允許此次操作

image

輸入密碼或者使用TouchID後安裝器就會執行安裝,安裝過程僅需幾秒鐘

image

imageimage

  1. 安裝完成

安裝完成後可以點擊Java SE文檔和關閉

  • 關閉:關閉安裝嚮導,完成Java8安裝

關閉安裝嚮導時還會提示你要將“JDK 17.0.7”安裝器移到廢紙簍嗎?,建議點擊保留,這樣下次重裝時不需要重新下載Java17

  1. 推出桌面的JDK 17.0.7

選中桌面的JDK 17.0.7,然後右鍵推出即可,當然也可以使用快捷鍵Command+E推出

image

4.2.2 ARM64位架構macOS版Java17安裝目錄

默認情況下ARM64位架構macOS版Java17安裝目錄是/Library/Java/JavaVirtualMachines/jdk-17.jdk

image

不過我們需要了解的是/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home目錄

image

Java17安裝目錄說明

目錄說明
bin該目錄下主要存放JDK的各種工具命令,例如javac和java
conf該目錄下主要存放JDK相關的配置文件
include該目錄下主要存放一些平臺的頭文件
jmods該目錄下主要存放JDK的各種模塊
legal該目錄下主要存放JDK各模塊的授權文檔
lib該目錄下主要存放JDK工具的一些補充jar包和源代碼,Java源碼src.zip在該目錄下

作爲Java初學者來說,目前只需要關注bin目錄和src.zip壓縮文件

  • bin目錄:存放Java提供的開發工具,例如javac,java,javap

image

  • src.zip:存放Java源代碼文件(.java結尾的文件)

image

可以雙擊解壓後查看,默認解壓在下載目錄

image

然後選擇java.base

image

再查看String.java

image

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命令**

image

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相互切換

  1. 啓動iTerm終端

如果你之前將iTerm放在Dock欄,點擊Dock欄的iTerm圖標啓動
在這裏插入圖片描述

iTerm啓動成功

image

  1. 查看系統所使用的Shell類型

不同類型的Shell所使用的配置文件不同,例如zsh使用的.zshrc,而bash使用的.bash_profile。

使用echo $SHELL 命令查看當前系統所使用的Shell類型

macOS Ventura默認使用的zsh

image

  1. 創建配置文件

如果你使用的是bash shell,在用戶家目錄下創建.bash_profile文件

如果你使用的是zsh shell,在用戶家目錄下創建.zshrc文件

macOS的用戶家目錄指的就是/Users/liuguanglei,其中liuguanglei表示用戶名,每個系統的用戶名可能不相同。

當啓動終端後默認就是在家目錄下,可以使用pwd命令查看當前所在的目錄

image

macOS Ventura使用的Shell是zsh,因此使用touch .zshrc命令創建.zshrc文件

文件創建成功後使用 ls -al查看文件

image

  1. 在配置文件中添加Java17的JAVA_HOME環境變量配置

首先在終端上使用vim .zshrc命令打開配置文件

此時處於命令模式,無法編輯內容

需要將輸入法切換到英文後再按i鍵切換到編輯模式

然後添加如下配置

#配置基於ARM64位架構macOS版Java17的JAVA_HOME環境變量
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home

image

JAVA_HOME環境變量配置完成後按esc鍵退出編輯模式回到命令模式

image

最後輸入:wq並回車保存並退出vim編輯器

image

  1. 將配置文件的環境變量加載到shell會話中

source .zshrc 命令將.zshrc配置文件中的環境變量加載到shell會話中

  1. 驗證配置

在終端上輸入 echo $JAVA_HOME命令回車後如果能夠輸出Java17的安裝目錄/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home表示JAVA_HOME環境變量配置成功

image

4.3.3 ARM64位架構macOS版Java17配置PATH環境變量

4.3.3.1 PATH環境變量介紹

PATH環境變量的本質就是一系列路徑,例如/bin,/usr/bin,/usr/local/bin等等,多個路徑之間使用冒號(:)隔開,macOS下可以在終端上使用echo $PATH查看當前系統的PATH環境變量

image

PATH環境變量的作用就是在終端上執行命令時,系統會從當前路徑和PATH環境變量配置的路徑下查找命令對應的可執行程序,然後執行該程序。

例如date命令可以查看系統日期,而where date 可以查看到date命令對應的可執行程序路徑,正因爲/bin目錄在PATH環境變量中,因此在終端輸入date命令實際上執行的是/bin目錄下的date程序

如果輸入一個不存在的命令,那麼shell會提示command not found

image

4.3.3.2 ARM64位架構macOS版Java17配置PATH環境變量

  1. 啓動iTerm終端

如果你之前將iTerm放在Dock欄,點擊Dock欄的iTerm圖標啓動

image

iTerm啓動成功

image

  1. 打開配置文件

在配置JAVA_HOME環境變量時創建過.zshrc文件,因此使用vim .zshrc命令打開該配置文件即可

打開後可以看到Java17的JAVA_HOME環境變量的配置

image

  1. 編輯配置文件

vim打開文件後處於命令模式,也就是隻能查看文件內容不能編輯

因此首先切換到英文輸入法後按i鍵切換到編輯模式

然後在文件末尾添加Java17 PATH環境變量的配置

# 配置基於ARM64位架構macOS版Java17的PATH環境變量
export PATH=$PATH:$JAVA_HOME/bin

image

Java17的PATH環境變量配置完成後按esc退出編輯模式回到命令模式

最後輸入:wq回車後保存並退出vim編輯器

image

image

  1. 將配置文件的環境變量加載到shell會話

source .zshrc 命令將.zshrc配置文件中的環境變量加載到shell會話中

image

  1. 驗證配置

在終端上輸入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

image

刪除目錄需要使用sudo rm -rf命令來完成。首次執行sudo rm -rf前需要輸入用戶的開機密碼

sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-17.jdk

4.4.3 刪除Java17環境變量配置文件

使用rm .zshrc命令刪除Java17環境變量配置文件.zshrc

image

刪除.zshrc文件後使用快捷鍵Command+N 重新開個終端窗口來驗證Java8的JAVA_HOME和PATH環境變量是否刪除

如下圖所示左邊終端窗口如果不重新開啓終端你會發現Java8的JAVA_HOME和PATH環境變量沒有刪除。右邊終端窗口是重新開啓的終端窗口驗證Java8的JAVA_HOME和PATH環境變量已經刪除。

image

最後在終端的任意路徑上輸入javac -version和java -version 查看Java編譯器和Java解釋器版本信息,如果提示

The operation couldn’t be completed. Unable to locate a Java Runtime. 表示卸載成功

image

4.5 ARM64位架構macOS版Java17和Java8相互切換

4.5.1 如何實現Java17和Java8切換

由於開發項目時使用Java8,但是學習JDK新特性時安裝了Java17,因此此時機器上同時存在兩個不同版本的JDK,分別是第三方Java8和Oracle官方Java17。

image

那麼如何在這兩個版本中間切換?

首先需要知道當前使用的Java版本

在終端的任意路徑通過javac -version和java -version得知目前使用的是Java17

image

爲什麼是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

image

那麼想要實現Java8和Java17相互切換,只需要修改JAVA_HOME環境變量值即可

4.5.2 ARM64位架構macOS版Java17切換到Java8

  1. 啓動終端

image

  1. 打開環境變量配置文件

使用vim .zshrc命令打開環境變量配置文件

image

打開後看到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

image

  1. 修改環境變量配置文件

在命令模式下按dd刪除Java17相關環境變量配置,dd每次刪除一行

然後按i鍵從命令模式切換到編輯模式

image

然後添加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

image

添加完成後按esc退出編輯模式回到命令模式

image

最後輸入:wq並回車保存並退出vim編輯器

image

image

  1. 將配置文件的環境變量加載到shell會話

source .zshrc 命令將.zshrc配置文件中的環境變量加載到shell會話中

image

  1. 驗證配置

在終端的任意路徑下輸入javac -version和java -version,查看輸出的版本信息如果是Java8,那麼就意味着成功從Java17切換到Java8

4.5.3 ARM64位架構macOS版Java8切換到Java17

  1. 啓動終端

  1. 打開環境變量配置文件

使用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

3.修改環境變量配置文件

在命令模式下按dd刪除Java8相關環境變量配置,dd每次刪除一行

然後按i鍵從命令模式切換到編輯模式

image

然後添加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編輯器

image

4.將配置文件的環境變量加載到shell會話

source .zshrc 命令將.zshrc配置文件中的環境變量加載到shell會話中

  1. 驗證配置

在終端的任意路徑下輸入javac -version和java -version,查看輸出的版本信息如果是Java17,那麼就意味着從Java8成功切換到Java17

image

5. macOS版第一個Java程序開發

5.1 Java程序的開發流程

image

  1. 編寫:使用Java開發工具編寫源文件,源文件以.java結尾,用於存儲Java代碼

  2. 編譯:使用javac把源文件編譯生成字節碼文件,字節碼文件以.class結尾,字節碼文件名和類名相同,字節碼文件的數量和源文件中class的數量相同,編譯的格式是javac 源文件名.java,例如javac HelloWorld.java

  3. 運行使用java解釋運行編譯生成後的字節碼文件,運行的格式是java 字節碼文件名(不需要.class後綴),例如java HelloWorld

5.2 Java開發工具介紹

雖然JDK提供了開發Java程序時所用到的一些工具,例如javac,java,javap,jconsole等等

image

但是JDK並沒有提供編寫Java代碼的開發工具,因此想要在編寫Java程序之前,還需要了解Java開發工具, 我這裏把Java開發工具分成兩類,分別是文本編輯器和IDE

image

Visual Studio Code和Sublime Text都是高級的文本編輯器,而且是跨平臺的(Windows,macOS,Linux),建議初學Java的朋友可以使用它們來開發Java程序,因爲相比IDE而言更加輕量級,對初學者更加容易上手。

image

IDEA和Eclipse都是IDE,IDE集成項目開發中常用的功能,包括編輯器、編譯工具、反編譯工具、測試工具、性能分析工具、部署工具等等,因此可以大大提高開發效率

目前大部分互聯網公司基本普遍都會使用IntelliJ IDEA開發Java項目,因此我們後期會全程使用IntelliJ IDEA。

如果你還在上大學而且剛好學的計算機專業,那麼大概率你的Java老師教你使用的Eclipse。

5.3 第一個Java程序開發

在學習任何一門編程語言時編寫的第一個程序通常都稱爲HelloWorld

如果你能夠編寫並且運行HelloWorld,那麼意味着已經邁入編程的大門

本次我們使用比較原始的開發方式:也就是基於文本編輯+iTerm終端+JDK提供的開發工具(javac和java)來開發人生的第一個Java程序,這種方式雖然和使用IDE開發相比效率比較低,但是能夠讓初學者更加直觀地理解Java程序的開發和運行流程。

  1. 新建code文件夾

在/Users/Documents目錄下,鼠標右鍵新建文件夾

將文件夾的名稱改爲code,用於存放Java源文件

image

  1. 新建Java源文件

首先在code目錄下右鍵 新建文件>Text

不過macOS Ventura右鍵沒有新建文件菜單,需要使用第三方軟件實現,例如右鍵助手專業版

image

右鍵助手專業版

image

右鍵助手安裝完成後,就可以選擇右鍵新建文件>Text

image

這樣就會創建一個文本文件,文件名是未命名.txt

然後將默認的未命名.txt重命名成HelloWorld.java

訪達還會提示 你確定要將擴展名“.txt”更改爲“.java”嗎?,點擊使用.java

image

這樣HelloWorld.java源文件就創建成功

image

  1. 編輯源文件

選中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保存

  1. 編譯源文件

首先需要開啓iTerm終端,因爲javac和java只能在終端上使用

然後使用cd Documents/code命令切換到源文件所在的目錄(/Users/liuguanglei/Documents/code)

image

pwd命令可以查看當前所在的目錄

image

然後輸入javac HelloWorld.java並回車 編譯源文件

image

如果沒有語法錯誤編譯成功之後會生成HelloWorld.class文件

  1. 解釋運行字節碼文件

在終端上輸入java HelloWorld後回車解釋執行HelloWorld.class字節碼文件

如果沒有任何運行時錯誤就會看到Windows終端打印輸出HelloWorld並換行

image

5.4 第一個Java程序詳解

   public class HelloWorld{
    	public static void main(String[]args){
    		System.out.println("Hello World");
    	}
    }
  1. public是一個關鍵字,表示權限最大的訪問權限修飾符,稱爲公共的,後期在學習面向對象的時候還會學習private,默認的,protected,這裏只需要記住如果類名使用public 修飾,那麼public修飾的類名必須和文件名保持一致

  2. class是一個關鍵字,用於定義類,例如class Welcome{} 表示定義一個類,類名是Welcome,{}表示類的開始範圍和結束範圍,Java是面向對象的編程語言,類是Java程序的基本單元。

  3. 在一個源文件中可以定義多個class,但是隻能有一個類被public修飾。編譯器在編譯後會生成和源文件中class數量一致的字節碼文件,字節碼文件名和類名相同。

public class World{
	public static void main(String[] args){
		System.out.println("HelloWorld");
	}
}

class Chinese{

}

class American{

}

編譯和運行World.java程序

  1. public static void main(String[] args){} 格式是固定的,表示main方法,main方法是Java程序的入口,Java程序是從main方法的第一行開始執行的,該方法被JVM調用,如果你的Java程序想要獨立運行,那麼必須要固定格式的main方法

  2. 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程序

image

需要注意的是最後一句打印輸出語句末尾添加了%

這是因爲如果你的最後輸出不是換行,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都可以。

  1. 在Windows上編寫HelloWorld.java源文件
public class HelloWorld{
	public static void main(String[]args){
		System.out.println("跟光磊學Java從小白到架構師");
	}
}

  1. 在Windows終端上使用javac編譯HelloWorld.java源文件,生成字節碼文件

  1. 在macOS iTerm終端上使用java解釋運行字節碼文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章