JPMS:Java平臺模組系統
JPMS代表Java平臺模組系統。它是Java 9中的新特性。藉助Java模組系統,我們的Java應用程式和Java包可以打包成Java模組。Java模組允許我們指定哪些模組的包和其他Java模組可以訪問。Java模組還列出了其正常執行所需的Java模組。
Java平臺系統也稱為Java Jigsaw或Project Jigsaw。Jigsaw的名字在其開發時使用。開發它的主要目的是使JRE更加模組化。JPMS解決了一些主要問題,即類路徑/JAR衝突、龐大的單體JDK、版本衝突、安全問題。
現在,讓我們更深入地瞭解Java平臺模組系統,以瞭解更多資訊。
為什麼Java需要模組?
重要的是要記住,JPMS是一個SE(標準版)特性,它在各個層面上影響Java。儘管如此,該補丁旨在使大多數程式在從Java 8切換到Java 9時無需修改即可執行。其主要目的是啟用對模組可見的相關包的集合,同時隱藏模組外部使用者的一些元件。
JPMS釋出時,其目標如下:
易於組織大型應用程式和庫。
提高安全性
提高應用程式效能
管理平臺的小型裝置分解。
改進結構。
類路徑與模組路徑
到目前為止,類路徑一直是確定在Java中執行程式時程式可以訪問的內容的主要決定因素。儘管扮演著這個角色並且眾所周知,但類路徑最終變成了一個大型的、未區分的容器,所有依賴項都插入其中。
模組路徑在類路徑之上添加了一層。它充當包的儲存空間,並選擇哪些包對應用程式可見。
類路徑 |
模組路徑 |
|---|---|
適用於所有Java版本 |
僅適用於Java 9及以上版本 |
不需要module-info.java |
需要module-info.java |
僅當專案沒有module-info.java時,新增庫才有效 |
庫可以在沒有module-info.java的情況下工作 |
僅新增非模組化庫 |
可以新增模組化和非模組化庫 |
封裝和抽象較弱 |
封裝和抽象較強 |
模組化較弱 |
模組化較強 |
無法透過將庫新增到類路徑中來將庫的一部分新增到專案中 |
我們只能透過將庫新增到模組路徑中來將庫的所需部分新增到專案中 |
Java中的模組
JDK由模組組成。如果您在系統上使用JDK,那麼您也擁有原始碼。如果您不知道這一點,請檢視此處以瞭解更多資訊。
在JDK安裝目錄中有一個/lib目錄。在該目錄中,您將找到一個src.zip檔案。然後將其解壓到/src目錄中。之後檢視/src目錄並找到/java.base目錄,然後您將找到module-info.java檔案,最後開啟它。
在頂部的Javadoc註釋之後,您將找到一個名為module section.base的資料夾,後跟exports行。格式有點深奧,所以我們不會深入探討。
如您所見,java.base模組匯出了一些眾所周知的Java包,包括java.io。這就是收集包的模組的功能。

指令的需求與匯出相反。因此,模組對於正在指定的模組可能是必要的。您指定模組路徑的方式與在針對模組執行Java編譯器時提供類路徑的方式相同。這使得解決依賴項成為可能。
向後相容性
Java 9在設計時考慮了向後相容性。但是,新的模組結構是一個如此重大的轉變,以至於您可能會遇到問題,尤其是在大型程式碼庫中。
以下命令可能對源自程式碼庫的問題有用:當jdeps命令指向一個類時,它將查詢任何依賴項以及需要依賴項的模組。
如果您的依賴項導致問題,您可以希望您依賴的包具有與Java 9相容的更新版本來構建。如果不是,您可能需要尋找其他選項。
常見錯誤
如何解決java.lang.NoClassDefFoundError:
Javax/xml/bind/JAXBException
這是程式碼抱怨未找到指定的類,因為它已遷移到模組,而使用程式碼無法看到該模組。這有幾種解決方案。
JPMS是一個相當重大的轉變,因此採用需要一些時間。幸運的是,由於Java 8是長期支援版本,因此沒有迫切需要。
然而,從長遠來看,舊專案需要遷移,新專案必須明智地使用模組,以便可能獲得已提供的某些好處。
結論
JPMS代表Java平臺模組系統,在其最初的開發階段也稱為Project Jigsaw。它使開發人員更容易組織大型應用程式和庫。它改進了結構並提高了平臺的安全性。它還用於提高應用程式效能,並且對於小型裝置的平臺分解很有用。其背後的主要思想是啟用對模組可見的相關包的集合,同時隱藏模組上外部使用者的元素。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP