Submit Search
Upload
CH19:深入模組化
•
1 like
•
795 views
Justin Lin
Follow
認識模組的種類 處理模組依賴與封裝細節 使用模組API 建立JAR、JMOD與JIMAGE
Read less
Read more
Technology
Report
Share
Report
Share
1 of 27
Download now
Download to read offline
Recommended
深入模組化
深入模組化
Justin Lin
CH17:反射與類別載入器
CH17:反射與類別載入器
Justin Lin
CH02:從JDK到IDE
CH02:從JDK到IDE
Justin Lin
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Justin Lin
反射與類別載入器
反射與類別載入器
Justin Lin
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Justin Lin
Recommended
深入模組化
深入模組化
Justin Lin
CH17:反射與類別載入器
CH17:反射與類別載入器
Justin Lin
CH02:從JDK到IDE
CH02:從JDK到IDE
Justin Lin
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Justin Lin
反射與類別載入器
反射與類別載入器
Justin Lin
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Justin Lin
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Justin Lin
自訂泛型、列舉與標註
自訂泛型、列舉與標註
Justin Lin
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Justin Lin
CH16:整合資料庫
CH16:整合資料庫
Justin Lin
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
Java平台概論
Java平台概論
Justin Lin
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Justin Lin
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Justin Lin
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Justin Lin
CH1:Java平台概論
CH1:Java平台概論
Justin Lin
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Justin Lin
2. 從 REPL 到 IDE
2. 從 REPL 到 IDE
Justin Lin
認識物件
認識物件
Justin Lin
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用API
Justin Lin
Java SE 7 技術手冊試讀 - Java 平台概論
Java SE 7 技術手冊試讀 - Java 平台概論
Justin Lin
進階主題
進階主題
Justin Lin
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Justin Lin
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Justin Lin
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
More Related Content
What's hot
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Justin Lin
自訂泛型、列舉與標註
自訂泛型、列舉與標註
Justin Lin
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Justin Lin
CH16:整合資料庫
CH16:整合資料庫
Justin Lin
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
Java平台概論
Java平台概論
Justin Lin
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Justin Lin
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Justin Lin
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Justin Lin
CH1:Java平台概論
CH1:Java平台概論
Justin Lin
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Justin Lin
2. 從 REPL 到 IDE
2. 從 REPL 到 IDE
Justin Lin
認識物件
認識物件
Justin Lin
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用API
Justin Lin
Java SE 7 技術手冊試讀 - Java 平台概論
Java SE 7 技術手冊試讀 - Java 平台概論
Justin Lin
進階主題
進階主題
Justin Lin
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Justin Lin
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Justin Lin
What's hot
(20)
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
自訂泛型、列舉與標註
自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
CH16:整合資料庫
CH16:整合資料庫
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java平台概論
Java平台概論
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
CH1:Java平台概論
CH1:Java平台概論
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
2. 從 REPL 到 IDE
2. 從 REPL 到 IDE
認識物件
認識物件
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊試讀 - Java 平台概論
Java SE 7 技術手冊試讀 - Java 平台概論
進階主題
進階主題
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
More from Justin Lin
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin
Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
Ch07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
Ch06 使用 JSP
Ch06 使用 JSP
Justin Lin
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
Ch04 會話管理
Ch04 會話管理
Justin Lin
Ch03 請求與回應
Ch03 請求與回應
Justin Lin
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
14. 進階主題
14. 進階主題
Justin Lin
13.並行、平行與非同步
13.並行、平行與非同步
Justin Lin
12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
11. 常用內建模組
11. 常用內建模組
Justin Lin
10. 資料永續與交換
10. 資料永續與交換
Justin Lin
9. 資料結構
9. 資料結構
Justin Lin
More from Justin Lin
(20)
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Ch12 Spring 起步走
Ch12 Spring 起步走
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Ch09 整合資料庫
Ch09 整合資料庫
Ch08 自訂標籤
Ch08 自訂標籤
Ch07 使用 JSTL
Ch07 使用 JSTL
Ch06 使用 JSP
Ch06 使用 JSP
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch04 會話管理
Ch04 會話管理
Ch03 請求與回應
Ch03 請求與回應
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
14. 進階主題
14. 進階主題
13.並行、平行與非同步
13.並行、平行與非同步
12. 除錯、測試與效能
12. 除錯、測試與效能
11. 常用內建模組
11. 常用內建模組
10. 資料永續與交換
10. 資料永續與交換
9. 資料結構
9. 資料結構
CH19:深入模組化
1.
1
2.
深入模組化 學習目標 • 認識模組的種類 • 處理模組依賴與封裝細節 •
使用模組API • 建立JAR、JMOD與JIMAGE 2
3.
模組的種類 3
4.
模組的種類 • Java SE
9也將JDK本身做了模組化,src.zip 中的原始碼被劃分到各個模組 • 除了可使用JAR來封裝模組之外,JDK9還有 了JIMAGE與JMOD格式 4
5.
具名模組、未具名模組 • 如果應用程式採取模組化設計,預設就會依 賴在java.base模組之上,java.base模 組exports的套件,任何模組都可以讀取 5
6.
具名模組、未具名模組 • 在JDK9之後多了模組,模組中的public類 別、方法、值域是否能被另一模組看見,還 要視模組設定而定 • 在定義模組時必須記得,同一個套件不可以 同時出現在被requires的兩個模組中,這 稱為分裂套件(Split
package) • 會導致編譯失敗,而執行時期會產生 LayerInstantiationException 6
7.
具名模組、未具名模組 • 就算是Java SE
API,若不是java.base模 組中的類別,還是必須requires相關的模 組 • 若使用到 javax.xml.bind、javax.rmi 等套件,還是會出現編譯錯誤 • 必須使用--add-modules java.se.ee, 才找得到這些套件。 7
8.
顯式模組、自動模組 • 顯式模組無法依賴在未命名模組,因為未具 名模組並沒有名稱,無法在顯式模組的模組 描述檔中進行requires 8
9.
顯式模組、自動模組 • 自動模組有隱含的模組定義,可以讀取其他 模組,其他模組也可以讀取自動模組 • 應用程式在遷移至模組化設計的過程中,自 動模組會是未具名模組至顯式模組之間的橋 樑 9
10.
顯式模組、自動模組 • 並不是任何JAR都可以自動產生正確的模組 名稱 – 取得JAR的主檔名 –
去除版本號 – 替換名稱中非字母部份為句號(.) 10
11.
顯式模組、自動模組 • 無法自動產生正確的模組名稱,此時若被放 到模組路徑的JAR檔案 – 編譯時期沒有名稱可以requires –
執行時期會產生 IllegalArgumentException,從而使得 JVM無法初始模組層而發生FindException 11
12.
顯式模組、自動模組 • 如果同一個套件出現在模組路徑上多個既有 的JAR檔案中,由於一個套件不能出現在多 個模組,因此只有其中一個JAR能成為自動 模組,而其他會被忽略 12
13.
一般模組、開放模組 • 讀取能力 • 存取能力 13
14.
一般模組、開放模組 • java.base模組exports了所有的套件, 但沒有opens套件,也沒有open模組本身, • 任何模組都不能對java.base做深層反射 14
15.
• 因應模組化的特性,類別載入器階層有了變 化 • 被棄用的模組可以使用@Deprecated標註 •
某個模組如果還是得使用被棄用的模組,又 不想收到警訊,那就加上個 @SuppressWarnings("deprecation") 15
16.
requires、exports與opens • requires transitive •
requires static • exports to、opens to 16
17.
requires transitive 17
18.
requires static • requires定義了模組間的依賴關係,而且 是包含了編譯時期與執行時期的依賴關係 •
如果某個模組是可選的,僅在編譯時期需要 ,執行時期該模組可以不用存在,那麼可以 使用requires static來設定僅在編譯時 期依賴 18
19.
exports to、opens to 19
20.
修補模組 • 想臨時地替換掉模組中某(些)類別,像是 修補臭蟲,或進行測試時需要,也可能是臨 時性地修補分裂套件的問題 20
21.
放寬模組封裝與依賴 • Oracle JDK非標準引數 –
--add-exports – --add-opens – --add-reads 21
22.
使用Module 22
23.
使用Module • 只有在模組內的類別,才能呼叫所在模組的 addExports()、addOpens()、 addReads()、addUses() 23
24.
使用Module 24
25.
使用ModuleDescriptor • getDescriptor()可以傳回 java.lang.module.ModuleDescripto r,這個實例代表著具名模組(包含自動模組 )的模組描述檔 • 未具名模組的getDescriptor()會傳回 null •
包含的是靜態的模組描述資訊 25
26.
淺談ModuleLayer • 絕大多數的應用程式專案並不需要意識到模 組層的存在 • 像是某種服務容器或者plugins架構的應用程 式才會使用模組層 26
27.
打包模組 • JAR • JMOD •
JIMAGE 27
Download now