JDK9 之模組化
Java 9 特性以及解決的問題
我們將探討關於Java 9模組化系統的以下主題:
1.介紹
Oracle 將Java 9從2017年3月延期到2017年9月進行發行。
我們知道, Java SE 8提供了三大新特性(加上少量改進和新特性)。
- Lambda 表示式
- Stream API
- Date API
同樣地, Java SE 9提供了三大新特性(加上少量改進和新特性): - Java模組系統(Jigsaw專案)
- Java REPL(互動式程式設計)
- Milling project coin(主要是語法改進的一個專案,Java7的時候就已經開始)
2.JavaSe9之Jigsaw Project
Jigsaw專案的主要目標:
模組化JDK
我們知道,當前JDK系統是很大的。因此他們決定劃分JDK成小模組得到一定數量的好處
模組化原始碼
當前原始程式碼jar檔案是非常大的,特別是rt.jar是相當的大。 因此他們劃分Java原始程式碼成更小的模組。
模組化執行時間的影像
這個特性的主要目標是“調整JDK和JRE執行時間的影像系統的支撐”。
壓縮大部分內部的API
這個特性的主要目標是“使大多JDK的內部APIs不能進入,但是留下一些重要,用途廣泛的內部的APIs”。
Java平臺模組系統
這個特性的主要目標“允許使用者創造他們的模組開發他們的應用”。
jlink :Java聯結器
這個jlink工具的主要目標“允許使用者在他們的應用中建立可執行檔案。
3.當前Java系統的問題
Java SE 8或更加早期的系統在開發或提供Java應用時有以下問題:
因為JDK是太大的,對於小裝置很難進行等比例縮減。Java SE 8提出了3種緊湊型別解決這個問題:compact1、compact2和compact3。 但是這個問題並沒有得到有效的解決。
Jar檔案,像rt.jar等jar檔案太大的以至於不能使用在小裝置和應用中。
因為JDK是太大的,我們的應用或裝置不能支援更好的平臺.
由於修飾符是public的緣故,每個人都可以通過此來進行訪問,所以在當前Java系統的封閉性不是很強。
由於JDK,Jre過於龐大,以至於很難進行測試和維護應用。
由於public的關係,Java比較開放。不可避免的能訪問象sun., .internal.*等的一些內部不重要的APIs。
由於上述關係,使用者可以訪問到一些內部的api,所以安全性方面也是一個大問題。
應用太大。
元件間的鬆耦合的支援稍微薄弱
4.Java9模組系統的特性
為了解決所有這些問題, 所以Oracle Corp在Java SE 9中釋出了Java SE 9模組系統.
在Java SE 9中分離了JDK, JRE,jar等為更小的模。因此我們可以方便的使用任何我們想要的模組。因此縮減Java應用程式到小裝置是非常容易的。
更加容易的測試和維護
支援更好的平臺
public不再僅僅是public。現在已經支援非常強的封閉性(不用擔心,後邊我們會用幾個例子來解釋)。
我們不能再訪問內部非關鍵性APIs了。
模組可以非常安全地幫助我們掩藏那些我們不想暴露的內部細節,我們可以得到更好的Security.
應用會變的非常小,因為我們可以只使用我們要用的模組。
元件間的鬆耦合變得非常容易。
更容易支援唯一責任原則(SRP)。
5.Jdk9和Jdk8的對比
我們知道JDK軟體都包含什麼。在安裝JDK 8軟體以後,我們能看到目錄中包含bin、jre、lib等解壓在Java主目錄中。在Jdk9中,Oracle Corp稍微改變了這個資料夾的結構如下所示:
- JDK 8資料夾結構:
- JDK 9資料夾結構:
我們可以發現在JDK 9中不包含JRE的。 JRE被分離到一個分開的資料夾。 但是JDK 9軟體包含一個新的資料夾“jmods”。它包含一套Java 9模組,如下所示:
在JDK 9,沒有rt.jar和tools.jar檔案。
- 注:截止到今天, “jmods”包含98個模組。在後續的版本也許會增加。 “jmods”資料夾在$ {JAVA_HOME}
/jmods中才可用。這些叫JDK Modules. *
6.Java9模組化是什麼?
Java9中的模組是程式碼、資料和有些資源的自描述的集合。它是一套相關package、type(類、抽象類,介面等)與程式碼&資料和資源。
7.Java9模組化系統之母
到現在為止Java 9模組系統提供了98個模組。 並且Oracle Corp已經分離JDK的jars和Java SE規格到兩套Modules裡.
- 所有的JDK Mdoules與 “jdk.*”一起啟動。
- 所有Java SE規格模組與“java.*”一起啟動。
- Java 9模組系統有一個“java.base”模組。它叫作基本的模組。 它是一個獨立模組並且沒有依賴於所有其他模組。 預設情況下,其他模組依賴於這個模組。
所以“java.base”模組是被成為Java9模組化系統之母。
它是所有JDK模組和使用者定義的Modules的預設模組.
8.Java9和Java8程式的對比。
使用Java 5,6,7或者8.,我們已經開發了許多Java應用程式。我們知道Java 8或更早的應用是什麼樣的,包含什麼東西。
簡而言之,Java 8的應用會是如下所示:
Java 9的應用與之前的沒有太多的不同。 他只是引入了一個新的元件叫module,如果你要用它就需要將相關聯的包集合分組到同一個組中。再有就是module修飾符(“module-info.java”).
應用的其餘同初期版本應用一樣如下所示:
像Java 8應用一樣,頂層元件是package,在Java9中則使用module作為頂層元件。
簡而言之,我們可以說Java 9模組包含以下主要部分:
- one Module
- Module Name
- Module Descriptor(描述符)
- 包集合
- Types和Resources集合
**本文來自: