What ?!
基本上,除非你開發的應用程式有特定的需求,非得使用 Oracle JDK 提供的功能,才需要付費去使用它,否則請改用 OpenJDK。
甲骨文收購昇陽之後,開發者從 2016 年開始必須明確地分辨使用的是 Oracle JDK 或 OpenJDK,不然可能會收到甲骨文的付款通知 💸。OpenJDK 是針對 Java SE 實作的開源軟體,不同的公司即組織均有實作,甲骨文本身也有提供,還有 IBM、RedHat、微軟等。
Java 是個程式語言,本身沒有收不收費的問題,是開發工具 (JDK) 及執行環境 (JRE) 才有收費、免費使用的問題。當你使用其他 JVM 語言開發時,例如 Kotlin,如果你使用的是 Oracle JDK ,仍舊是需要付費的,改用 OpenJDK 則沒有這個問題,所以收費的問題不是出在程式語言上。另外,JRE 是包含在 JDK 裡面的,它是個執行環境,可以讓 JDK 編譯而成的位元碼在其中執行,OpenJDK 中也有包含其實作的 JRE。
以前的 Java 教學書籍上,第一章就會教你去如下的網站下載 JDK (Java SE):
從現在開始請別這麼做,網站上已經好心的提供你一個免費版本的 JDK 的連結,這是由 Oracle 維護的 OpenJDK 版本,絕大多數的功能都和 Oracle JDK (Java SE) 相同,只缺少那些需要付費的特定項目。
Android 從 N (7.0) 開始已經轉移到 OpenJDK。
JDK 版本更新歷史
版本 | 發佈年份 | 事件 |
---|---|---|
JDK Beta | 1995 年 | 首次發佈 |
JDK 1.0 | 1996 年 | 初發佈時命名為 Oak 1.0.2 真正穩定版才被稱作 Java |
JDK 1.1 | 1997 年 | |
J2SE 1.2 | 1998 年 | 版本重命名 在 J2SE 5.0 發佈時,被重命名為 Java 2 而版本名稱為 J2SE 用於區別 J2EE, J2ME |
J2SE 1.3 | 2000 年 | |
J2SE 1.4 | 2002 年 | |
J2SE 5.0 | 2004 年 | 代號為 Tiger 版號改變,內部版號 (開發者) 為 1.5 外部則為 5.0 |
Java SE 6 | 2006 年 | 版本重命名, J2SE 改為 Java SE,並且去掉 .0 內部版號仍為 1.6.0 |
Java SE 7 | 2011 年 | 距上個版本約 5 年 2009 年 4 月 20 日,甲骨文收購昇陽 |
Java SE 8 (LTS) | 2014 年 | 第一個長期支援版本 社群版支援到 2019 年 1 月 非社群版支援到 2020 年 12 月 2016 年甲骨文開始對商業授權收費 |
Java SE 9 | 2017 年 | 支援到 2018 年 3 月 距上個版本約 3 年,但是約 1 年就終止了 |
Java SE 10 | 2018 年 | 支援到 2018 年 9 月 發佈不到一年即終止 |
Java SE 11 (LTS) | 2018 年 | 2018 年 9 月 25 日發佈,為長期支援版本 |
參考資料:https://zh.wikipedia.org/wiki/Java%E7%89%88%E6%9C%AC%E6%AD%B7%E5%8F%B2
安裝 OpenJDK
我們現在該怎麼做?如前面所說,OpenJDK 只是一個概念,有許多公司或組織都有實作它們自己版本的 OpenJDK,最簡單方便的是使用甲骨文的 OpenJDK,它的網址是 https://openjdk.java.net/ 及 https://jdk.java.net/,但是請注意它的下載說明文字:
請注意你前往的是 Oracle 的 OpenJDK,而不是 Oracle 的 JDK (這個指的是付費的 Java SE)。
要找到安裝檔可以直接在網址後面接版本,例如:https://jdk.java.net/11 或目前較多人用的 https://jdk.java.net/8 ;但很不幸地,目前 Oracle 的 OpenJDK 沒有提供 8 版給 Mac 或 Windows 等平台,你下載的仍是 Oracle 的 JDK (在 Linux 上可以安裝 8 版的 JRE),所以下載前你會看到網站要求你接受授權 (Accept License Agreement) 🤷♂️,目前看來,Oracle 的 OpenJDK 你只能用 10 或 11 版。
怎麼那麼煩 🤦♂️
因為大家工作用的電腦可能是 Windows 、Mac 或 Linux,所以我想找一個能同時提供這三個平台的 OpenJDK 實作,於是找到了 AdoptOpenJDK,這是一個由 Java 使用者群組所組成的社群,致力於倡導 OpenJDK;它提供的支援平台最全面,JDK 版本也涵蓋 8 到 11 最齊全。
你可以到這頁找到自己想要的 OpenJDK 版本及支援的平台,我概略說明一下各平台的安裝流程,基本上都差不多,首先就是下載 OpenJDK,解壓縮後,將子目錄 bin 的完整路徑加入環境變數即可。
Windows 的安裝
- 下載 AdoptOpenJDK 提供的壓縮檔,解壓縮後假設目錄名稱為 jdk8u192-b12-jre,假設放在 C:下,那完整路徑就是,
C:\jdk8u192-b12-jre
- 開啟環境變數設定:
電腦
>(右鍵)內容
>進階系統設定
>環境變數
>新增或編輯系統變數
- 新增
JAVA_HOME
:指向C:\jdk8u192-b12-jre
- 編輯
PATH
:在最前面加入%JAVA_HOME%\bin;....後面接原本的內容
- 加入
classpath
:指向%JAVA_HOME%\lib
以後要更新 JDK 版本時,只要修改 JAVA_HOME
指向新目錄即可。
如果你的命令提示字元視窗在設定之前已開啟,必須關掉後再重開,然後檢查是否安裝成功:
java -version
javac -version
Mac 的安裝
除了如前 Windows 的安裝方式外,還可以使用 Homebrew 、homebrew-cask 來安裝比較方便。
brew tap adoptopenjdk/openjdk
# 如果你想安裝最新版本,目前是 11
brew cask install adoptopenjdk
# 或是安裝版本 8
brew cask install adoptopenjdk8
# 安裝後目錄在
/usr/local/Cellar/adoptopenjdk-openjdk8/jdk8u192-b12/
接著就是在設定 shell ,讓它知道指令目錄在哪裡。
# 如果有使用 zsh, fish 請自行調整
vim ~/.bash_profile
# 設定 JDK 主目錄
export JAVA_HOME=/usr/local/Cellar/adoptopenjdk-openjdk8/jdk8u192-b12
# JDK 指令都在 /bin 目錄下,把它加到 PATH 變數中
export PATH=$JAVA_HOME/bin:$PATH
重開終端機或執行
source ~/.bash_profile
檢查是否安裝成功:
java -version
javac -version
Linux 的安裝
除了下載壓縮檔,還可以透過 yum、apt-get 等方式安裝,之後一樣設定 JAVA_HOME
及 $PATH
變數,然後檢查是否成功。
移除 Oracle JDK
當你安裝的 OpenJDK 成功後,就趕快移除 Oracle JDK 吧~
Windows 通常在「新增移除程式」或「程式和功能」中可以看到之前的安裝,解除安裝即可。
Mac 必須手動刪除檔案:
- /Library/Java/JavaVirtualMachines/ 此目錄下的 JDK 目錄都刪除
- 刪除 /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
- 刪除 /Library/PreferencePanes/JavaControlPanel.prefPane
- 刪除 ~/Library/Application\ Support/Oracle/Java
因為 Applet 及 ControlPanel 都是 Oracle 提供的,OpenJDK 並沒有這些東西,這就是前面所提到的某些需要付費的項目,記得把它們都移除。
多久更新一次版本
目前已知 OpenJDK 8 及 11 版為 LTS (長期支援版本),根據統計,目前最多人使用的是 8 版 (79%),而 OpenJDK 8 可能會跟隨 Oracle JDK 8 一樣支援到 2020 年底 (不確定),如果你不是很追求新功能的話,不必每次有新版本就立即更新 (應該很少人這麼做吧),但是安全性修補的更新仍是必要的。
2021-09-30 補充更新
AdoptOpenJDK 在 2021-07-24 加入 Eclipse 基金會並重新命名為 Adoptium,JDK 的代號為 Eclipse Temurin ,如果有用 Homebrew 要搜尋 "temurin"。
目前最新的 LTS 版本為 17。
2022-03-29 新聞「傳甲骨文開始嚴查Java授權」
部份摘錄:
報導指出,最近一些美國企業收到甲骨文授權管理部門的訊息,詢問Java授權數量。
根據甲骨文的方案,Java SE為每顆CPU每月25美元,或每人每月2.5美元,提供Java授權、功能及安全更新、管理服務、GraalVM Enterprise及24x7支援服務。
部分企業已經開始尋求開源方案。由於甲骨文仍然根據GPL提供Oracle OpenJDK, 因此有的企業已經汰除Oracle Java,而改用Open JDK或其他方案。
2022-09-02 補充
Which Version of JDK Should I Use? 要選擇哪個版本的 JDK,最佳建議是 Adoptium Eclipse Temurin 17
之前的 Adoptopenjdk 已被加入 Eclipse 基金會,以 Adoptium 新名稱繼續維護其版本的 OpenJDK。
我要留言
留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。