SlideShare a Scribd company logo
Submit Search
Upload
CH19:深入模組化
Report
Share
Justin Lin
Technology / Community Evangelist at Free lancer
Follow
•
1 like
•
791 views
1
of
27
CH19:深入模組化
•
1 like
•
791 views
Report
Share
Download Now
Download to read offline
Technology
認識模組的種類 處理模組依賴與封裝細節 使用模組API 建立JAR、JMOD與JIMAGE
Read more
Justin Lin
Technology / Community Evangelist at Free lancer
Follow
Recommended
深入模組化 by
深入模組化
Justin Lin
1K views
•
27 slides
CH17:反射與類別載入器 by
CH17:反射與類別載入器
Justin Lin
280 views
•
65 slides
CH02:從JDK到IDE by
CH02:從JDK到IDE
Justin Lin
481 views
•
58 slides
Java SE 8 技術手冊第 1 章 - Java平台概論 by
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
11.6K views
•
44 slides
Java SE 7 技術手冊投影片第 01 章 - Java平台概論 by
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Justin Lin
5.9K views
•
43 slides
反射與類別載入器 by
反射與類別載入器
Justin Lin
562 views
•
70 slides
More Related Content
What's hot
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫 by
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Justin Lin
2.1K views
•
100 slides
自訂泛型、列舉與標註 by
自訂泛型、列舉與標註
Justin Lin
633 views
•
94 slides
Java SE 7 技術手冊投影片第 05 章 - 物件封裝 by
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Justin Lin
2.6K views
•
75 slides
CH16:整合資料庫 by
CH16:整合資料庫
Justin Lin
359 views
•
107 slides
Java SE 8 技術手冊第 2 章 - 從JDK到IDE by
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
5.3K views
•
66 slides
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器 by
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
1.9K views
•
48 slides
What's hot
(20)
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫 by Justin Lin
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Justin Lin
•
2.1K views
自訂泛型、列舉與標註 by Justin Lin
自訂泛型、列舉與標註
Justin Lin
•
633 views
Java SE 7 技術手冊投影片第 05 章 - 物件封裝 by Justin Lin
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Justin Lin
•
2.6K views
CH16:整合資料庫 by Justin Lin
CH16:整合資料庫
Justin Lin
•
359 views
Java SE 8 技術手冊第 2 章 - 從JDK到IDE by Justin Lin
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
•
5.3K views
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器 by Justin Lin
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
•
1.9K views
Java平台概論 by Justin Lin
Java平台概論
Justin Lin
•
2.4K views
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架 by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 12 章:從模式到框架
Justin Lin
•
2K views
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API by Justin Lin
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Justin Lin
•
3.1K views
Java SE 7 技術手冊投影片第 09 章 - Collection與Map by Justin Lin
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Justin Lin
•
2.5K views
CH1:Java平台概論 by Justin Lin
CH1:Java平台概論
Justin Lin
•
1.3K views
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註 by Justin Lin
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Justin Lin
•
2.8K views
2. 從 REPL 到 IDE by Justin Lin
2. 從 REPL 到 IDE
Justin Lin
•
234 views
認識物件 by Justin Lin
認識物件
Justin Lin
•
1.1K views
Java SE 7 技術手冊投影片第 12 章 - 通用API by Justin Lin
Java SE 7 技術手冊投影片第 12 章 - 通用API
Justin Lin
•
2.2K views
Java SE 7 技術手冊試讀 - Java 平台概論 by Justin Lin
Java SE 7 技術手冊試讀 - Java 平台概論
Justin Lin
•
5.5K views
進階主題 by Justin Lin
進階主題
Justin Lin
•
715 views
Java SE 8 技術手冊第 5 章 - 物件封裝 by Justin Lin
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
•
3.4K views
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註 by Justin Lin
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Justin Lin
•
2.2K views
Java SE 8 技術手冊第 17 章 - 反射與類別載入器 by Justin Lin
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Justin Lin
•
2.3K views
More from Justin Lin
Ch14 簡介 Spring Boot by
Ch14 簡介 Spring Boot
Justin Lin
872 views
•
22 slides
Ch13 整合 Spring MVC/Security by
Ch13 整合 Spring MVC/Security
Justin Lin
280 views
•
58 slides
Ch12 Spring 起步走 by
Ch12 Spring 起步走
Justin Lin
274 views
•
31 slides
Ch11 簡介 JavaMail by
Ch11 簡介 JavaMail
Justin Lin
157 views
•
8 slides
Ch10 Web 容器安全管理 by
Ch10 Web 容器安全管理
Justin Lin
153 views
•
30 slides
Ch09 整合資料庫 by
Ch09 整合資料庫
Justin Lin
233 views
•
92 slides
More from Justin Lin
(20)
Ch14 簡介 Spring Boot by Justin Lin
Ch14 簡介 Spring Boot
Justin Lin
•
872 views
Ch13 整合 Spring MVC/Security by Justin Lin
Ch13 整合 Spring MVC/Security
Justin Lin
•
280 views
Ch12 Spring 起步走 by Justin Lin
Ch12 Spring 起步走
Justin Lin
•
274 views
Ch11 簡介 JavaMail by Justin Lin
Ch11 簡介 JavaMail
Justin Lin
•
157 views
Ch10 Web 容器安全管理 by Justin Lin
Ch10 Web 容器安全管理
Justin Lin
•
153 views
Ch09 整合資料庫 by Justin Lin
Ch09 整合資料庫
Justin Lin
•
233 views
Ch08 自訂標籤 by Justin Lin
Ch08 自訂標籤
Justin Lin
•
133 views
Ch07 使用 JSTL by Justin Lin
Ch07 使用 JSTL
Justin Lin
•
161 views
Ch06 使用 JSP by Justin Lin
Ch06 使用 JSP
Justin Lin
•
250 views
Ch05 Servlet 進階 API、過濾器與傾聽器 by Justin Lin
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
•
204 views
Ch04 會話管理 by Justin Lin
Ch04 會話管理
Justin Lin
•
238 views
Ch03 請求與回應 by Justin Lin
Ch03 請求與回應
Justin Lin
•
236 views
Ch02 撰寫與設定 Servlet by Justin Lin
Ch02 撰寫與設定 Servlet
Justin Lin
•
352 views
CH1. 簡介 Web 應用程式 by Justin Lin
CH1. 簡介 Web 應用程式
Justin Lin
•
1.2K views
14. 進階主題 by Justin Lin
14. 進階主題
Justin Lin
•
406 views
13.並行、平行與非同步 by Justin Lin
13.並行、平行與非同步
Justin Lin
•
237 views
12. 除錯、測試與效能 by Justin Lin
12. 除錯、測試與效能
Justin Lin
•
153 views
11. 常用內建模組 by Justin Lin
11. 常用內建模組
Justin Lin
•
149 views
10. 資料永續與交換 by Justin Lin
10. 資料永續與交換
Justin Lin
•
156 views
9. 資料結構 by Justin Lin
9. 資料結構
Justin Lin
•
292 views
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