1. 程式人生 > >JDK9 之模組化

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應用時有以下問題:

    1. 因為JDK是太大的,對於小裝置很難進行等比例縮減。Java SE 8提出了3種緊湊型別解決這個問題:compact1、compact2和compact3。 但是這個問題並沒有得到有效的解決。

      1. Jar檔案,像rt.jar等jar檔案太大的以至於不能使用在小裝置和應用中。

      2. 因為JDK是太大的,我們的應用或裝置不能支援更好的平臺.

      3. 由於修飾符是public的緣故,每個人都可以通過此來進行訪問,所以在當前Java系統的封閉性不是很強。

      4. 由於JDK,Jre過於龐大,以至於很難進行測試和維護應用。

      5. 由於public的關係,Java比較開放。不可避免的能訪問象sun..internal.*等的一些內部不重要的APIs。

  • 由於上述關係,使用者可以訪問到一些內部的api,所以安全性方面也是一個大問題。

    1. 應用太大。

    2. 元件間的鬆耦合的支援稍微薄弱

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資料夾
  • 注:截止到今天, “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集合

**本文來自: