基本介紹

為什麼需要JDK

JDK是Java Development Kit的簡稱,是開發、編譯、執行Java語言需要的軟體套件,裡面還包含JRE、JVM等。其中JVM經過20多年的發展,有很多好東西在裡面,所以除了Java之外還有很多程式語言也透過JVM來執行,例如Kotlin、Groovy、Scala、來自Ruby的JRuby、來自Python的Jyhton…等。

OracleJDK與OpenJDK

OracleJDK是從甲骨文網站上下載的Java開發與執行環境,商業使用需要付費。OpenJDK的功能與OracleJDK是甲骨文另外發布的基於GPLv2 with classpath exception的OpenSource版,因為是GPL授權所以可以商業使用。

之前甲骨文與Google的Java官司,以及甲骨文宣布Java要收費的消息,令人聞之色變。先不談與Google官司的部分,其實Java本來就是有收費與不收費的部分,只是早期區分的很不明確。在官方的JDK當中某些功能不收費、某些功能要收費,恐怕連甲骨文自己都不好判斷哪些用戶要收費了。而且OracleJDK能免費使用的話,同為官方發佈的OpenJDK的存在變得有點微妙。後來就改成很明確的規則,使用OracleJDK要收費,OpenJDK不變。有點像是Linux上有Ubuntu和Ubuntu pro,Red Hat Enterprise Linux 與Fedora那樣(RIP CentOS…)。

大約從Java 10到Java 16的期間OracleJDK都是禁止直接商業使用的,必須付授權費。從17開始對於一些企業內部使用的情況有放寬條件,但通常還是建議直接使用OpenJDK,除非你本來就打算購買OracleJDK授權。

前面提到的OpenJDK都是Oracle提供的OpenJDK,每一代的安全性更新的時間比較短,專注在更新新版本。但不必擔心這些,因為我們不但有OpenJDK(builds by Oracle),還有許多甲骨文以外的公司推出的OpenJDK實作可以使用,也就是本文要介紹的!

為什麼有這麼多JDK

Java語言有共通的規範與標準,比如「JEP 286: Local-Variable Type Inference」這邊提議了Java 10開始可以使用好用的關鍵字var來宣告區域變數,由編譯器自動型別推斷。OpenJDK的組織會開放提議Java的新特性,經過修正與討論後,再投票決定是否要成為正式功能,而且有時候只會定義Interface而不會規範實作。因此不同公司、組織可以依照規範建立OpenJDK實作。有點像是遵守Unix規範的各種類Unix作業系統,或是遵守Linux kernel的各種Linux發行版一樣,玲瑯滿目的選擇有時令人不知從何選起。

更多資訊可以參考:https://en.wikipedia.org/wiki/Java_Community_Process

Java與JDK版本

  • EA:早期預覽版,還不穩定,例如現在有20EA,代表20還不是正式版。
  • GA:一般版,可以正式使用。通常不會標註GA,例如19。
  • LTS:長期支援版,出了新一代之後還是會有安全性更新。目前LTS版有8、11、17,沒特別限制的情況下建議使用當時最新的LTS版。

各種JDK介紹

Eclipse Temurin

官網介紹:https://adoptium.net/

專案介紹:https://projects.eclipse.org/projects/adoptium

下載連結:https://adoptium.net/temurin/releases/

Docker:https://hub.docker.com/_/eclipse-temurin/

支援平台:Linux(x64、arm64)、macOS(x64、arm64)、Solaris、Windows(x86、x64)

支援版本:8、11、16、17、18、19

推薦與否:推薦

Eclipse基金會底下的頂級專案,有很多大公司加入維護這個JDK,例如IBP、Red Hat、微軟。支援的作業系統與CPU架構最豐富,不只我上面列出的那些,可以到下載連結看看有多少種。

Amazon Corretto

官網介紹:https://aws.amazon.com/tw/corretto/

下載連結:https://docs.aws.amazon.com/corretto/latest/corretto-17-ug/downloads-list.html

Docker:https://hub.docker.com/_/amazoncorretto

支援平台:Linux(x64、arm64)、macOS(x64、arm64)、Windows(x64)

支援版本:8、11、15、16、17、18、19

推薦與否:推薦

Amazon提供的OpenJDK實作,介紹頁面寫道「Amazon Corretto 17 is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK). 」也就是不用成本、多平台、可以用於正式環境的OpenJDK版本。除了提供各個作業系統與Docker容器之外,Amazon自己的AWS雲端服務自然也是採用Corretto。

Azul Zulu

官網介紹:https://www.azul.com/zh-hans/

下載連結:https://www.azul.com/downloads/?package=jdk

Docker:https://hub.docker.com/r/azul/zulu-openjdk

支援平台:Linux(x86、x64、arm、arm64)、macOS(x64、arm64)、Windows(x86、x64、arm64)

支援版本:6、7、8、11、13、15、17、18、19、20EA

推薦與否:推薦

Azul Zulu是Azul提供的免費版OpenJDK實作,支援的Java版本最豐富,連遠古時期的Java 6都有(舊稱Java 1.6),三個常見作業系統的各種CPU架構也都支援,是個不錯的選擇。Azul的JDK跟Oracle一樣,有免費版與付費版。其中Zulu是免費版的,不限制商業用途;Core與Prime是付費版的,但試驗與開發用途下可以免費使用,這點也跟現在的Oracle類似。

AdoptOpenJDK

下載連結:https://adoptopenjdk.net/

推薦與否:不推薦

這個專案已經停止開發了,最新的版本只到16而已。開發團隊將AdoptOpenJDK託給Eclipse Adoptium,是Eclipse Temurin的前身,所以有在使用的話建議改用Eclipse Temurin囉!

不推薦還特別寫出來是因為前幾年AdoptOpenJDK還蠻多人用的,包含我手邊有些主機也用它,提醒有在用的人記得遷移囉!按照Java優良的向下相容能力,轉換一個JDK版本不太會出問題,而且Amazon、Azul、Eclipse也都還有提供舊版但有在維護的OpenJDK,例如8和11的LTS。

其他

沒介紹的OpenJDK實作還有很多,沒提到有些是因為停止發展了,或是適用範圍比較特別。例如還有IBM發行的、微軟發行的、Red Hat發行的,甚至連阿里巴巴都有自己的OpenJDK實作版本,之前真不曉得。可以參考這邊有篇詳細的介紹「Which Version of JDK Should I Use?」。

參考