jdk9 模塊簡介(很是簡)

jdk9 模塊定義

JDK9定義瞭如下幾個模塊
普通模塊(有module-info.java文件)
開放模塊(與普通模塊相似,只是前面多了一個open關鍵字,全部類可反射,包含私有方法)
匿名模塊(無module-info.java文件,通常是JDK9之前的JAR包),匿名模塊在JDK9裏面會成爲自動模塊
自動模塊與普通模塊的區別,自動模塊也就是匿名模塊,它實際至關於一個open模塊,裏面的全部類能夠被反射,自動模塊調用普通模塊須要遵循模塊規則。java

jdk9 模塊關鍵字

通常在源代碼根目錄下寫一個固定的module-info.java文件
module XXXX{}  定義一個普通模塊
open module XXX{} 定義一個開放模塊 能夠反射全部
require module name  寫在模塊裏面,須要依賴某個模塊
require static module name 編譯必須,運行不須要
export package 導出該包下的全部的public修飾的類,能夠反射
export package to module name 導出該包下的全部的public修飾的類給某個模塊使用,能夠反射
opens package to module name 開放該包下全部的類
uses 在當前模塊下加載服務
provides interface name with implemnet name 在當前模塊下定義服務名,多個實現類用逗號隔開

ServiceLoader 加載服務,須要在META-INFO/services/目錄下,建立以接口全名爲名稱的配置文件,內容爲實現類的全名稱,多個實現類換行分隔

jdk9 模塊打包

編譯 -d 設置編譯後文件存放路徑
javac -d mods -encoding utf-8  src/main/java/com/city/City.java src/main/java/module-info.java

javac -d mods -encoding utf-8 -p ../city/mods  src/main/java/com/school/School.java  src/main/java/module-info.java

運行模塊內的主文件
java -p mods;../city/mods -m school/com.school.School

建立jmod包
jmod create school.jmod -p mods

輸出jlink
jlink --module-path "%JAVA_HOME%"\jmods --add-modules school.jmod --output link
相關文章
相關標籤/搜索