# 情境解套:java切換版本失敗 首先 我真的是有夠笨,居然有這種事發生 目前需要切換的版本會是 java17 跟 java21 但我無法切換,明明都有安裝卻一直切換失敗 來說一下背景 ## 安裝 java (官網download & homebrew 指令安裝java) ### 官網download 我前面透過教學跑去官網下載來安裝 java ,並非指令 ![截圖 2024-05-07 下午2.08.28](https://hackmd.io/_uploads/ByvwSrvGA.png =100x) ### homebrew 指令安裝 java 在安裝 Java17 則是用 [homebrew 指令安裝](https://formulae.brew.sh/formula/openjdk@17) ```shell $ brew install openjdk@17 ``` ## 指令操作 過程中有幾個指令可能會用到 * 查看版本 ```shell $ java -version ``` * 列出 Mac 上安裝的所有 Java 虛擬機器(Java Virtual Machines,JVMs)的目錄 ```shell $ ls /Library/Java/JavaVirtualMachines/ ``` 根據上面指令後 ,我只有看到 版本22 (jdk-22) (我安裝到最新的,所以出現的是22) 我明明 透過官網有安裝,以及homebrew java17 都有安裝 ### 問題一: java17 到底是沒安裝好?還是????? :::success Ans: Homebrew 通常會將安裝的軟件放置在"特定的位置",而不是 macOS 系統默認的 Java 安裝目錄。 `/Library/Java/JavaVirtualMachines/` 所以可以使用 `$ brew --prefix openjdk@17` 指令,來找到 homebrew 安裝 java 的路徑 ::: ```shell $ brew --prefix openjdk@17 ``` 執行後得到 ``` /opt/homebrew/opt/openjdk@17 ``` ## 切換 java版本號 `前提! 在沒有安裝 SDKMAN 工具的話 才會遇到下面叫繁瑣操作` 我終於找到版本所在,現在想要去切換版本 這叫做 **"設置 JAVA_HOME 變量"** ,更改後面的路徑設定 ``` $ export JAVA_HOME=$(/usr/libexec/java_home -v [version]) ``` 來照樣造句 * ### 官網下載,路徑為預設值的話 1. 改成版本22 ``` $ export JAVA_HOME=$(/usr/libexec/java_home -v 22) ``` 或 ``` $ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-22.jdk/Contents/Home ``` 1. 改回版本17 (😶‍🌫️但我這裡無法切換成功,因為我不是在預設點,我是用 homebrew 載入的) ``` $ export JAVA_HOME=$(/usr/libexec/java_home -v 17) ``` 或 ``` $ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home ``` * ### homebrew 下載,路徑為特定位置的話 改後面的路徑 ``` $ export JAVA_HOME=/opt/homebrew/opt/openjdk@17 ``` * ### SDKMAN 工具的話 已經安裝了 SDKMAN,用簡短的指令來切換不同版本 Java 即可! 1. sdk 查看 可用版本 ``` $ sdk list java ``` 1. 切換要的 Java 版本 ``` $ sdk install java <version> ``` ex: java17 ``` $ sdk use java 17.0.1-open ``` 1. 也可以安裝其他版本哦! ``` $ sdk install java <version> ``` ## [安裝 SDKMAN 工具](https://hackmd.io/WVcKhh4CRTCENEmsOFd4Og) 剛剛嘗試安裝了 sdk 來玩玩 本來想試試上面指令,但目前我已經透過 Homebrew 安裝了 Java 17 就暫時不重複安裝 同時也不想安裝其他版本 因為目前用不到之外 也不希望各版本太分散在不同目錄下,我先筆記起來✌️,如果之後有需要用到 SDK ![截圖 2024-05-09 上午2.02.13](https://hackmd.io/_uploads/H1eE0EtMA.png)