天天看點

Java9 子產品化 Jigsaw 入門指引

Java9正式版馬上就要釋出了,這裡筆者先介紹下Java9 的子產品化具體是怎麼回事。

相比于Java,其實js領域很早就進行了子產品化了。閑話少扯。今天我們來看看Java9是怎麼做到子產品化的。

熟悉Java的同學都知道,在Java(1--->8)之前,使用的都是一個很大的jar檔案rt.jar 這個jar包在Java8 中有60多M.并且,在我們的Java代碼運作時,還需要tools.jar這個jar,這個jar也不小。

也有十幾M。這兩個檔案是運作一個Java程式最小的所需環境。也就是說運作一個Helloworld java程式也需要引入幾十M的jar。

如果是在JavaEE的環境中。那麼情況将變得更加複雜。

Java9 子產品化 Jigsaw 入門指引

子產品化可以讓讓JavaSE的程式更加輕量級更加容易部署。

子產品就是代碼和資料的封裝體,代碼是指一個packages,就是以前我們寫的一個個的包。而子產品是一個或者多個包的集合體。

我們這裡可以看一下Java子產品化的配置檔案。

module module1 {
    //間接引用了java.sql子產品
    requires transitive java.sql;
    exports org.huluo.module1;
}      

上面的配置檔案隻導出了一個包org.huluo.module1

也就是說該子產品的org.huluo.module1包下的class可以被引用。子產品下的其他包中的類就算是public 修飾的類其他子產品也不能引用到。這個話題後面會講述到。

上面的配置檔案做了三件事情,定義了子產品module1,間接引用了java.sql子產品和将org.huluo.module1包導出。

還有,在Java9中,public 通路修飾符不再意味着可以通路了。

子產品之間的關系被稱作readability(可讀性),代表一個子產品是否可以找到這個子產品檔案,并且讀入系統中(注意:并非代表可以通路其中的類型)。在實際的代碼,一個類型對于另外一個類型的調用,我們稱之為可通路性(Accessible),這意味着可以使用這個類型; 可通路性的前提是可讀性,換句話說,現有子產品可讀,然後再進一步檢測可通路性(安全)。

Java9 子產品化 Jigsaw 入門指引
Java9 子產品化 Jigsaw 入門指引

在介紹一下什麼是子產品的Transitive引用(間接引用)

當我們的子產品2引用了子產品1,如果子產品1引用了java.sql子產品。實際上子產品2是引用不到java.sql子產品的。

但是如果我們将子產品1的引用申明為間接引用了java.sql子產品,則子產品2可以引用到java.sql子產品。

這個跟maven的依賴傳遞有點類似。

下面是demo工程:http://download.csdn.net/download/u013803262/9972059

參考自:http://www.jianshu.com/p/053a5ca89bbb