Java 版本遷移
May 14, 2022Java 最早是 Sun 公司綠色專案(Green Project)中撰寫 Star7 應用程式的一個程式語言,當時的名稱不是 Java,而是取名為 Oak。
Java 誕生
綠色專案始於 1990 年 12 月,由 Patrick Naughton、Mike Sheridan 與被尊稱為 Java 之父的 James Gosling 主持,目的是希望構築出下一波電腦應用的趨勢並加以掌握,他們認為下一波電腦應用的趨勢將會集中在消費性數位產品(像是今日的平板、手機等消費性電子商品)的使用上,在 1992 年 9 月 3 日Green Team專案小組展示了 Star7 手持設備,這個設備具備了無線網路連接、5 吋 LCD 彩色螢幕、PCMCIA 介面等功能,而 Oak 在綠色專案中的目的,是用來撰寫 Star7 上應用程式的程式語言。
Oak 名稱的由來,是因為 James Gosling 的辦公室窗外有一顆橡樹(Oak),就順手取了這個名稱。但後來發現 Oak 名稱已經被註冊了,工程師們邊喝咖啡邊討論著新的名稱,最後靈機一動而改名為 Java 這個名稱。
Java 本身會見到許多為了節省資源而作的設計,像是動態載入類別檔案、字串池(String pool)等特性,這是因為 Java 一開始就是為了消費性數位產品而設計,而這類小型裝置通常有著有限的記憶體與運算資源。
全球資訊網(World Wide Web)興起,Java Applet 成為網頁互動技術代表。
1993 年第一個全球資訊網瀏覽器Mosaic誕生,James Gosling 認為網際網路與 Java 的一些特性不謀而合,利用 Java Applet 在瀏覽器上展現互動性的媒體,在當時而言,對人們的視覺感官是一種革命性的顛覆,Green Team 仿照了 Mosaic 開發出一個以 Java 技術為基礎的瀏覽器 WebRunner(原命名為BladeRunner),後來改名為 HotJava,雖然 HotJava 只是一個展示性的產品,但它使用 Java Applet 展現的多媒體效果馬上吸引了許多人的注意。
1995 年 5 月 23 日,正式將Oak改名為 Java,Java Development Kits(當時的JDK全名)1.0a2 版本正式對外發表,當日被公認為 Java 生日,而在 1996 年 Netscape Navigator 2.0 也正式支援 Java,Microsoft Explorer 亦開始支援 Java,從此 Java 在網際網路的世界中逐漸風行起來,雖然 Star7 產品並不被當時的消費性市場接受,綠色專案面臨被裁撤的命運,然而全球資訊網(World Wide Web)的興起卻給了 Java 新的生命與舞台。
從 J2SE 到 Java SE
隨著 Java 越來越受到矚目,Sun 在 1998/12/4 年發佈 Java 2 Platform,簡稱 J2SE 1.2,Java 開發者版本一開始是以 Java Development Kit 名稱發表,簡稱 JDK,而 J2SE 則是平台名稱,包含了 JDK 與 Java 程式語言。
Java 平台標準版約每兩年為週期推出重大版本更新,1998/12/4 發表 J2SE 1.2,2000/5/8 發表 J2SE 1.3,2002/2/13 發表 J2SE 1.4,「Java 2」這個名稱也從 J2SE 1.2 一直延用至之後各個版本。
2004/9/29 發表的Java平台標準版的版號不是 1.5,而直接跳到 5.0,稱為 J2SE 5.0,這是為了彰顯這個版本與之前版本有極大不同,像是語法上的簡化、增加泛型(Generics)、列舉(Enum)、標註(Annotation)等重大功能。
2006/12/11 發表的 Java 平台標準版,除了版號之外,名稱也有了變化,稱為 Java Platform, Standard Edition 6,簡稱 Java SE 6,JDK6 全名則稱為 Java SE Development Kit 6,也就是不再像以前 Java 2 帶有 “2” 這個號碼,版本號 6 或 1.6.0 都使用,6 是產品版本(Product version),而 1.6.0 是開發者版本(Developer version)。
大部份的 Java 標準版平台都會取個代碼名稱(Code name),例如 J2SE 5.0 的代碼名稱為 Tiger(老虎),為了引人注目,在發表會上還真的抱了一隻小白老虎出來作為噱頭,而許多書的封面也應景地放上老虎的圖片。有關 JDK 代碼名稱與釋出日期,可以參考 J2SE Code Names,當中列出至 J2SE 5.0,至於 Java SE 6 代碼名稱為 Mustang(野馬),發佈日期為 2006/12/11,Java SE 7 代碼名稱為 Dolphin(海豚),發佈日期為2011/7/28。
江山易主
之前談過,Java 約以兩年為週期推出重大版本更新,然後從 Java SE 6 之後,Java 開發人員足足等了四年多,才等到新版本的推出,不禁讓人想問:Java 怎麼了?
原因有許多,Java SE 7 對新版本的規劃搖擺不定,涵蓋許多不易實現的新特性,加上 Sun 苦於營收低迷不振,影響了新版本的推動,推出的日期承諾不斷跳票,然後2010年Oracle宣佈併購Sun,Java也正式成為Oracle所屬,併購就會帶來一連串的組織重整,導致 Java SE 7 推出日期再度跳票,在歷經了一些重新規畫、調整後,Java SE 7 才終於於 2011/7 釋出。
Java SE 8 亦是一波三折,原訂於 2013 年釋出,卻因為接二連三爆出的 Java 安全漏洞,迫使 Java 開發團隊決定先行檢視、修補 Java 安全問題,幾經延遲之後,最後確定發表 Java SE 8 的時間為 2014/3。
後來 Java SE 9 重大特性之一 Java 模組平臺系統(Java Platform Module System),也因為開發不及,以及發生了 JCP 執行委員會(Java Community Process Executive Committee)曾經投票否決了 Java 模組平臺系統等因素,使得 Java SE 9 釋出日期多次往後推移,才終於在 2017/9 正式釋出。
目前釋出週期
Java SE 6 之後,重大版本的推出往往費日曠時,給予人停滯不前的感覺,相對地,有不少其他語言技術採取了常態化發佈新版本的做法,Java 後來也跟上了潮流,從 Java SE 9 開始,JDK 採取以半年為週期,持續發布新版本。
常態化發佈的新版本,內容僅包含當時已完成的新特性。版本格式採取 $FEATURE.$INTERIM.$UPDATE.$PATCH,$FEATURE 每六個月變更一次,必須包含新增特性,$INTERIM 目前總是為 0,保留此項目是作為未來使用之彈性,同一 $FEATURE 下,$UPDATE 每三個月遞增一次,包含安全、臭蟲修正,而 $PATCH 只會在緊急重大修補時遞增,因此這系列文件基礎的 Java SE 17 來說,完整版本號是 17.0.0。
就企業而言,安全性修補是重要考量之一,需要留意的是長期支援版本(Long Term Support),Java SE 8 是 LTS,而 Java SE 8 之後,Java SE 16 以前,每三年釋出 LTS,因此 Java SE 11、17 是 LTS,LTS 版本維護的週期較長,實際維護時間視 JDK 來源而定,可能會是三到六年不等的時間。
然而,Java SE 17 開始,LTS 的釋出週期,加速為兩年一次,目的是為了讓企業、開放原始碼程式庫或框架有更多的 LTS 選擇。
至於Java SE 9、12 到 16 等,只是短期支援版本,釋出後六個月後就不再維護,通常作為開發評估之用,在新版本釋出後,短期支援版本的使用者應儘快更新至新版本。
三大平臺
在 Java 發展的過程中,由於 Java 的應用領域越來越廣,並逐漸擴及至各級應用軟體的開發,Sun 公司在 1999 年 6 月美國舊金山的 Java One 大會上,公佈了新的 Java 體系架構,該架構根據不同級別的應用開發區分了不同的應用版本:J2SE(Java 2 Platform, Standard Edition)、J2EE(Java 2 Platform, Enterprise Edition)與 J2ME(Java 2 Platform, Micro Edition)。
J2SE、J2EE 與 J2ME 是當時的名稱,由於 Java SE 6 後 Java 不再帶有 “2” 這個號碼,J2SE、J2EE 與 J2ME 分別被正名為Java SE、Java EE 與 Java ME。
- Java SE
Java 各應用平台的基礎,想要學習其它的平台應用,必先瞭解 Java SE 以奠定基礎,可以分作四個主要的部份:JVM、JRE、JDK與 Java 語言。
為了要能運行 Java 撰寫好的程式,必須有 Java 虛擬機器(Java Virtual Machine, JVM)。 JVM 包括在 Java 執行環境(Java SE Runtime Environment, JRE)中,所以為了要運行 Java 程式,必須安裝 JRE。如果要開發 Java 程式,必須取得JDK(Java SE Development Kits),JDK 包括 JRE 以及開發過程中需要的一些工具程式,像是 javac
、java
等工具程式。
Java 語言只是 Java SE 的一部份,除了語言之外,Java 最重要的就是它提供了龐大且強大的標準 API,在熟悉 Java 語言之後,更多的時候,都是在學習如何使用 Java SE 提供的 API 來組成應用程式。
- Java EE/Jakarta EE
Java EE 以 Java SE 為基礎,定義了一系列的服務、API、協定等,適用於開發分散式、多層式(Multi-tiered)、以元件為基礎、以 Web 為基礎的應用程式,整個 Java EE 的體系是相當龐大的,可以肯定的是,必須在 Java SE 上奠定良好的基礎,再來學習 Java EE 的開發。
在 2017 年 9 月,Oracle 宣佈將 Java EE 開放原始碼,相關技術授權給了 Eclipse 基金會,而基金會後來把 Java EE 更名為 Jakarta EE。
- Java ME
Java ME 是 Java 平臺版本中最小的一個,目的是作為小型數位設備上開發及部署應用程式的平臺,像是消費性電子產品或嵌入式系統等,早期的手機、PDA、股票機等,常部署 Java ME,以便使用 Java 語言來開發相關應用程式,如遊戲、看盤、月曆等;後來 Android 系統興起,因為也可以使用 Java 語言來開發,不少 Java ME 的應用場合,被 Android 相關技術給取代了。