JDK9定義瞭如下幾個模塊
普通模塊(有module-info.java文件)
開放模塊(與普通模塊相似,只是前面多了一個open關鍵字,全部類可反射,包含私有方法)
匿名模塊(無module-info.java文件,通常是JDK9之前的JAR包),匿名模塊在JDK9裏面會成爲自動模塊
自動模塊與普通模塊的區別,自動模塊也就是匿名模塊,它實際至關於一個open模塊,裏面的全部類能夠被反射,自動模塊調用普通模塊須要遵循模塊規則。java
通常在源代碼根目錄下寫一個固定的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/目錄下,建立以接口全名爲名稱的配置文件,內容爲實現類的全名稱,多個實現類換行分隔
編譯 -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