jar包和module模塊


從Java 9開始,JDK又引入了模塊(Module)。

在Java 9之前,一個大型Java程序會生成自己的jar文件,同時引用依賴的第三方jar文件,而JVM自帶的Java標准庫,實際上也是以jar文件形式存放的,這個文件叫rt.jar,一共有60多M。jar只是用於存放class的容器,它並不關心class之間的依賴。

從Java 9開始引入的模塊,主要是為了解決“依賴”這個問題。如果a.jar必須依賴另一個b.jar才能運行,那我們應該給a.jar加點說明啥的,讓程序在編譯和運行的時候能自動定位到b.jar,這種自帶“依賴關系”的class容器就是模塊

為了表明Java模塊化的決心,從Java 9開始,原有的Java標准庫已經由一個單一巨大的rt.jar分拆成了幾十個模塊,這些模塊以.jmod擴展名標識,可以在$JAVA_HOME/jmods目錄下找到它們:

  • java.base.jmod
  • java.compiler.jmod
  • java.datatransfer.jmod
  • java.desktop.jmod
  • ..

這些.jmod文件每一個都是一個模塊,模塊名就是文件名。例如:模塊java.base對應的文件就是java.base.jmod。模塊之間的依賴關系已經被寫入到模塊內的module-info.class文件了。所有的模塊都直接或間接地依賴java.base模塊,只有java.base模塊不依賴任何模塊,它可以被看作是“根模塊”,好比所有的類都是從Object直接或間接繼承而來。把一堆class封裝為jar僅僅是一個打包的過程,而把一堆class封裝為模塊則不但需要打包,還需要寫入依賴關系,並且還可以包含二進制代碼(通常是JNI擴展)。此外,模塊支持多版本,即在同一個模塊中可以為不同的JVM提供不同的版本。

 

Java 9引入的模塊目的是為了管理依賴;

使用模塊可以按需打包JRE;

使用模塊對類的訪問權限有了進一步限制。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM