目錄
為什麼 Java 需要模組?
類別路徑VS模組路徑
JAVA 中的模組
向後相容性
常見錯誤
結論
首頁 Java java教程 JPMS:Java 平台模組系統

JPMS:Java 平台模組系統

Sep 24, 2023 pm 05:05 PM

JPMS 代表 Java 平台模組系統。這是Java 9中的新功能。我們的java應用程式和Java包可以藉助Java模組系統打包成Java模組。 Java 模組允許我們指定模組的哪些套件和其他 Java 模組應該能夠看到。 Java 模組也列出了它運作所需的 Java 模組。

Java 平台系統也稱為 Java Jigsaw 或 Project Jigsaw。 Jigsaw 的名字是在其開發時使用的。開發這個的主要目的是讓JRE更模組化。 JPMS 解決了幾個主要問題,分別是 Classpath/JAR Hell、大規模單體 JDK、版本衝突、安全問題。

現在,讓我們更深入地研究 Java 平台模組化系統,以了解更多關於它們的資訊。

為什麼 Java 需要模組?

重要的是要記住,JPMS 是一個 SE(標準版)功能,並且會影響 Java 的各個層級。儘管如此,該修補程式的目的是使大多數程式在從 Java 8 切換到 Java 9 時無需修改即可運行。其主要目的是收集模組可見的相關包,同時對模組的外部用戶隱藏一些組件.

JPMS 的推出有以下既定目標 -

  • 輕鬆組織大型應用程式和函式庫。

  • 提高安全性

  • #提高應用程式效能

  • #管理小型裝置的平台故障。

  • 改進結構。

類別路徑VS模組路徑

迄今為止,類別路徑一直是程式在 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 註解之後,您將找到一個名為 modulesection.base 的資料夾,後面是匯出行。格式有點深奧,所以我們不會太深入。

正如您所看到的,java.base 模組導出了幾個眾所周知的 Java 包,包括 java.io。這就是收集包的模組的工作原理。

JPMS:Java 平台模块系统

指令的要求與匯出相反。因此,所指定的模組可能需要一個模組。指定模組路徑的方式與針對模組執行 Java 編譯器時提供類別路徑的方式相同。這使得解決依賴關係成為可能。

向後相容性

Java 9 在創建時就考慮到了向後相容性。不過,新的模組結構是一個重大轉變,您可能會遇到問題,特別是在大型程式碼庫中。

以下命令可能對解決源自程式碼庫的問題有用 - 當命令 jdeps 指向一個類別時,它將尋找任何依賴項以及需要依賴項的模組。

如果您的依賴項導致問題,您可以希望您所依賴的套件具有相容 Java 9 的更新版本來建置。如果沒有,您可能需要尋找選項。

常見錯誤

如何解決java.lang.NoClassDefFoundError -

Javax/xml/bind/JAXBException
登入後複製

這是抱怨找不到分配的類別的程式碼,因為它已遷移到模組而對使用程式碼不可見。有幾種解決方案。

JPMS 是一個相當重大的轉變,因此採用需要一些時間。幸運的是,由於 Java 8 是長期支援版本,因此沒有迫切需要。

然而,從長遠來看,舊專案有必要遷移,而新專案必須明智地使用模組,以便也許獲得一些已經給予的好處。

結論

JPMS代表Java Platform Module System,在開發初期也稱為project jigsaw。它使開發人員可以更輕鬆地組織大型應用程式和程式庫。它改進了結構並提高了平台的安全等級。它還用於提高應用程式效能,並且對於較小設備的平台分解很有用。這背後的主要想法是啟用模組可見的相關套件的集合,同時對模組上的外部用戶隱藏元素。

以上是JPMS:Java 平台模組系統的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致應用無法運行?如何排查和解決? 公司安全軟件導致應用無法運行?如何排查和解決? Apr 19, 2025 pm 04:51 PM

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

如何使用MapStruct簡化系統對接中的字段映射問題? 如何使用MapStruct簡化系統對接中的字段映射問題? Apr 19, 2025 pm 06:21 PM

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

如何優雅地獲取實體類變量名構建數據庫查詢條件? 如何優雅地獲取實體類變量名構建數據庫查詢條件? Apr 19, 2025 pm 11:42 PM

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

如何將姓名轉換為數字以實現排序並保持群組中的一致性? 如何將姓名轉換為數字以實現排序並保持群組中的一致性? Apr 19, 2025 pm 11:30 PM

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

IntelliJ IDEA是如何在不輸出日誌的情況下識別Spring Boot項目的端口號的? IntelliJ IDEA是如何在不輸出日誌的情況下識別Spring Boot項目的端口號的? Apr 19, 2025 pm 11:45 PM

在使用IntelliJIDEAUltimate版本啟動Spring...

Java對像如何安全地轉換為數組? Java對像如何安全地轉換為數組? Apr 19, 2025 pm 11:33 PM

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

電商平台SKU和SPU數據庫設計:如何兼顧用戶自定義屬性和無屬性商品? 電商平台SKU和SPU數據庫設計:如何兼顧用戶自定義屬性和無屬性商品? Apr 19, 2025 pm 11:27 PM

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

使用TKMyBatis進行數據庫查詢時,如何優雅地獲取實體類變量名構建查詢條件? 使用TKMyBatis進行數據庫查詢時,如何優雅地獲取實體類變量名構建查詢條件? Apr 19, 2025 pm 09:51 PM

在使用TKMyBatis進行數據庫查詢時,如何優雅地獲取實體類變量名以構建查詢條件,是一個常見的難題。本文將針...

See all articles