Java 要收費 ?! 是時候使用 OpenJDK 了

OpenJDK

如果你還在使用 Oracle JDK,請趕快換到 OpenJDK 吧,甲骨文已經開始查授權了。

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 Beta1995 年首次發佈
JDK 1.01996 年初發佈時命名為 Oak
1.0.2 真正穩定版才被稱作 Java
JDK 1.11997 年 
J2SE 1.21998 年版本重命名
在 J2SE 5.0 發佈時,被重命名為 Java 2
而版本名稱為 J2SE 用於區別 J2EE, J2ME
J2SE 1.32000 年 
J2SE 1.42002 年 
J2SE 5.02004 年代號為 Tiger
版號改變,內部版號 (開發者) 為 1.5 外部則為 5.0
Java SE 62006 年版本重命名, J2SE 改為 Java SE,並且去掉 .0
內部版號仍為 1.6.0
Java SE 72011 年距上個版本約 5 年
2009 年 4 月 20 日,甲骨文收購昇陽
Java SE 8 (LTS)2014 年第一個長期支援版本
社群版支援到 2019 年 1 月
非社群版支援到 2020 年 12 月
2016 年甲骨文開始對商業授權收費
Java SE 92017 年支援到 2018 年 3 月
距上個版本約 3 年,但是約 1 年就終止了
Java SE 102018 年支援到 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 的安裝

  1. 下載 AdoptOpenJDK 提供的壓縮檔,解壓縮後假設目錄名稱為 jdk8u192-b12-jre,假設放在 C:下,那完整路徑就是,C:\jdk8u192-b12-jre
  2. 開啟環境變數設定:電腦 > (右鍵)內容 > 進階系統設定 > 環境變數 > 新增或編輯系統變數
  3. 新增 JAVA_HOME:指向 C:\jdk8u192-b12-jre
  4. 編輯 PATH:在最前面加入 %JAVA_HOME%\bin;....後面接原本的內容
  5. 加入 classpath:指向 %JAVA_HOME%\lib

以後要更新 JDK 版本時,只要修改 JAVA_HOME 指向新目錄即可。

如果你的命令提示字元視窗在設定之前已開啟,必須關掉後再重開,然後檢查是否安裝成功:

java -version
javac -version

Mac 的安裝

除了如前 Windows 的安裝方式外,還可以使用 Homebrewhomebrew-cask 來安裝比較方便。

brew tap adoptopenjdk/openjdk
brew cask install adoptopenjdk # 安裝最新版本, 目前是 11
brew cask install adoptopenjdk8 # 安裝版本 8
# 安裝後目錄在
/usr/local/Cellar/adoptopenjdk-openjdk8/jdk8u192-b12/bin/javac

接著就是在 ~/.bash_profile 或是 zsh、fishshell 等的設定檔,加入如下設定:

# 指向 JDK 主目錄
set JAVA_HOME /usr/local/Cellar/adoptopenjdk-openjdk8/jdk8u192-b12
# 加入 JDK 主目錄下的 /bin 到 PATH 變數
set 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 年底 (不確定),如果你不是很追求新功能的話,不必每次有新版本就立即更新 (應該很少人這麼做吧),但是安全性修補的更新仍是必要的。



本文網址:http://blog.tonycube.com/2018/11/java-openjdk.html
Tony Blog 撰寫,請勿全文複製,轉載時請註明出處及連結,謝謝 😀

我要留言

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。