Java 9模块是Java结构中最大的变化之一。在这里,我将简要介绍“Java 9模块系统”的高级概述。
Java 9模块
我们将了解Java 9模块系统的以下主题。
- 介绍
- Java SE 9:Jigsaw项目
- 当前Java系统存在的问题?
- Java SE 9模块系统的优势
- 比较JDK 8和JDK 9
- 什么是Java 9模块?
- Java 9模块系统的起源
- 比较Java 8和Java 9应用程序
介绍
Oracle公司将Java 9的发布日期从2017年3月推迟到2017年9月。正如我们所知,Java SE 8带来了三个重要的新功能(以及一些增强和新功能)。
- Lambda表达式
- 流API
- 日期API
同样地,Java SE 9将带来三个重要的功能(以及一些增强和新功能):
- Java模块系统(Jigsaw项目)
- Java REPL
- Milling Project Coin
在這篇文章中,我們將討論Oracle Jigsaw項目的基礎知識。
Java SE 9: Jigsaw Project
Jigsaw項目將引入全新的概念,即Java SE 9的Java模塊系統。這是Oracle Corp在Java SE 9發布中非常重大和有聲望的項目。最初,他們將此項目作為Java SE 7發布的一部分開始。然而,由於有巨大的變化,它被推遲到Java SE 8,然後再次推遲。現在,它即將在2017年9月與Java SE 9一起發布。Jigsaw項目的主要目標:
- 模塊化的JDK
正如我們所知,當前的JDK系統太大了。因此,他們決定將JDK本身分成小模塊,以獲得許多好處(我們將在接下來的部分中進行討論)。- 模塊化源代碼
當前的源代碼jar文件太大,特別是rt.jar太大了。因此,他們將把Java源代碼分成更小的模塊。- 模塊化運行時映像
這一功能的主要目標是“重組JDK和JRE運行時映像以容納模塊”。- 封裝大多數內部API
這一功能的主要目標是“默認情況下使大多數JDK的內部API無法訪問,但保留一些關鍵且廣泛使用的內部API可訪問”。- Java平台模塊系統
這一功能的主要目標是“允許用戶創建自己的模塊來開發應用程序”。- jlink:Java鏈接器
這個jlink工具的主要目標是“允許用戶為其應用程序創建可執行文件”。
如果你對這些事情不太清楚,不要擔心。我們將在接下來的部分和我的後續文章中通過一些有用的例子深入討論這些概念。
當前Java系統存在的問題?
在本部分中,我們將討論「為什麼我們需要Java SE 9模組系統」,這意味著目前Java系統存在的問題。Java SE 8或更早的系統在開發或交付基於Java的應用程序時存在以下問題。
- 由於JDK太大,將其縮小到小型設備上有些困難。Java SE 8引入了3種緊湊型配置文件來解決此問題:compact1、compact2和compact3。但這並未解決這個問題。
- 像rt.jar等JAR文件對於小型設備和應用程序來說太大而無法使用。
- 由於JDK太大,我們的應用程序或設備無法支持更好的性能。
- 當前Java系統中沒有強封裝,因為「public」訪問修飾符太開放。每個人都可以訪問它。
- 由於JDK和JRE太大,測試和維護應用程序很困難。
- 由於公開性太開放,無法避免訪問一些內部非關鍵API,如sun.*、*.internal.*等。
- 由於用戶也可以訪問內部API,安全性也是一個大問題。
- 應用程序太大。
- 在組件之間支持較少耦合也有些困難。
為解決所有這些問題,Oracle Corp將在Java SE 9發布版中推出Java模組系統。
Java SE 9模組系統的優勢
Java SE 9 模組系統將提供以下好處:
- 由於 Java SE 9 將 JDK、JRE、JAR 等分為較小的模組,因此我們可以使用任何我們想要的模組。因此,將 Java 應用程式縮小至小型設備非常容易。
- 易於測試和維護。
- 支援更好的性能。
- 因為 public 不再僅僅是 public,它支援非常強大的封裝。(不用擔心,這是一個大概念,我們將很快用一些有用的示例來探索它)。
- 我們無法再訪問內部非關鍵的 API。
- 模組可以非常安全地隱藏不需要的內部細節,我們可以獲得更好的安全性。
- 應用程式因為只能使用我們想要的模組而變得非常小。
- 支援組件之間的較少耦合變得容易。
- 支援單一職責原則(SRP)變得容易。
我們將很快逐一探索所有這些概念。
比較 JDK 8 和 JDK 9
我們知道 JDK 軟體包含什麼。安裝 JDK 8 軟體後,我們可以在 Java Home 文件夾中看到幾個目錄,如 bin、jre、lib 等。然而,Oracle Corp 將此文件夾結構稍微更改如下。 JDK 8 文件夾結構:
JDK 9 文件夾結構:
在 JDK 9 中不包含 JRE。在 JDK 9 中,JRE 被分離到一個獨立的分發文件夾中。JDK 9 軟體包含一個新的文件夾 “jmods”。它包含一組 Java 9 模組,如下所示。 在 JDK 9 中,沒有 rt.jar 和 tools.jar
注意:- 截至今天,“jmods” 包含 95 個模組。它可能會在最終發行版中增加。 “jmods” 文件夾位於 ${JAVA_HOME}/jmods。這些被稱為 JDK 模組。
什麼是 Java 9 模組?
A Module is a self-describing collection of Code, Data, and some Resources. It is a set of related Packages, Types (classes, abstract classes, interfaces etc) with Code & Data and Resources. Each Module contains only a set of related code and data to support Single Responsibility (Functionality) Principle (SRP). The main goal of Java 9 Module System is to support Modular Programming in Java. We will discuss on “What is a Module Descriptor” and “How to develop Java Modules” in my coming posts.
Java 9 模組系統的概要
截至目前為止,Java 9模組系統在早期存取的JDK中有95個模組。Oracle公司已將JDK的jar檔和Java SE規範分為兩組模組。
- 所有JDK模組都以“jdk.*”開頭。
- 所有Java SE規範模組都以“java.*”開頭。
Java 9模組系統有一個名為“java.base”的模組。它被稱為基礎模組。它是一個獨立的模組,不依賴於任何其他模組。預設情況下,所有其他模組都依賴於此模組。這就是為什麼“java.base”模組也被稱為Java 9模組的母親。它是所有JDK模組和使用者定義模組的預設模組。
比較Java 8和Java 9應用程式
我們已經使用Java 5、6、7或8開發了許多Java應用程序。我們知道Java 8或之前的應用程序是什麼樣子並包含什麼。簡而言之,我在下面的圖表中描述了一個Java 8應用程序:在Java 8或之前的應用程序中,頂級組件是一個包。它將一組相關的類型分組到一組中。它還包含一組資源。Java 9應用程序與此沒有太大區別。它只是引入了一個新組件,稱為“Module”,用於將一組相關的包分組到一組中。還有一個新組件叫做模塊描述符(“module-info.java”)。就是這樣。應用程序的其餘部分與早期版本的應用程序相同,如下所示:
就像Java 8應用程序將包作為頂級組件一樣,Java 9應用程序將模塊作為頂級組件。注意:每個Java 9模塊只有一個模塊和一個模塊描述符。與Java 8包不同,我們不能在單個模塊中創建多個模塊。簡而言之,我可以說Java 9模塊包含以下主要組件:
- 一個模塊
- 模塊名稱
- 模塊描述符
- 一組包
- 一組類型和資源
這裡的資源可能是 module-info.java(模組描述符)或任何其他屬性或 XML。我們在這篇文章中討論了太多的理論。我認為這已經足夠理解 Java 9 模組系統的基礎。在我接下來的文章中,我們將開始一些基本的模組開發。我會根據需要討論一些更多的理論概念或 Java 9 模組系統術語。這就是關於“Java 9 模組系統介紹”的全部內容。在我的接下來的文章中,我們將討論更多關於 Java SE 9 模組系統的概念。如果你喜歡我的文章或有任何問題/建議/錯誤,請給我留言。感謝閱讀我的教程。祝你學習 Java SE 9 愉快!參考:Project Jigsaw
Source:
https://www.digitalocean.com/community/tutorials/java-9-modules