JDK 9:模块系统状态的重点
馬克·雷因霍爾德 ( Mark Reinhold )的“模塊系統(tǒng)狀態(tài) (SOMS)”已于本月初發(fā)布,它提供了信息豐富的可讀性“對(duì)項(xiàng)目Jigsaw中原型的Java SE平臺(tái)進(jìn)行了增強(qiáng)的非正式概述,并被提議作為JSR 376的起點(diǎn)。” 在這篇文章中,我總結(jié)并突出了一些我在閱讀文檔時(shí)發(fā)現(xiàn)有趣的概念和術(shù)語(yǔ)。
- 模塊系統(tǒng)狀態(tài)指出Java開(kāi)發(fā)人員將定期使用文檔中討論的部分功能。 這些功能和概念是“模塊聲明,模塊化JAR文件,模塊圖,模塊路徑和未命名模塊”。
- 模塊是“一種基本的新型Java程序組件”,是“一個(gè)自命名的,自定義的代碼和數(shù)據(jù)集合”。
- “一個(gè)模塊聲明需要其他哪些模塊才能進(jìn)行編譯和運(yùn)行。”
- requires關(guān)鍵字似乎類似于OSGI的要求,捆綁或進(jìn)口包裝
- “一個(gè)模塊聲明了......其打包出口 ”到其他模塊。
- exports關(guān)鍵字似乎類似于OSGI的Export-Package 。
- 模塊聲明是“ Java編程語(yǔ)言的新構(gòu)造”,提供了“模塊的自我描述”。
- 慣例是將“模塊聲明的源代碼”放在“模塊源文件層次結(jié)構(gòu)根目錄中名為module-info.java的文件中”。
- “模塊名稱,如程序包名稱,不得沖突。”
- “模塊的聲明不包括版本字符串,也不包含對(duì)其依賴的模塊的版本字符串的約束。”
- “ 模塊化的JAR文件在所有可能的方式上都與普通的JAR文件類似,除了它的根目錄中還包含module-info.class文件。”
- “模塊化的JAR文件允許庫(kù)的維護(hù)者發(fā)布單個(gè)工件,該工件既可以在Java 9及更高版本上作為模塊使用,又可以在所有版本中作為類路徑上的常規(guī)JAR文件使用。”
- “ 基本模塊定義并導(dǎo)出了平臺(tái)的所有核心軟件包”,“被命名為java.base ”,是“模塊系統(tǒng)唯一已知的唯一模塊”,“始終存在”,并由所有其他模塊所依賴,并且不依賴其他模塊。
- 所有“平臺(tái)模塊”均以“ java. ”開(kāi)頭java. 前綴和“可能包括“用于數(shù)據(jù)庫(kù)連接的 java.sql ,用于XML處理的 java.xml和用于日志記錄的 java.logging 。”
- 前綴“ jdk. ”應(yīng)用于“ Java SE 9平臺(tái)規(guī)范中未定義的模塊”,但“特定于JDK”的名稱。
- 隱含可讀性 :關(guān)鍵字public可以在之后添加requires關(guān)鍵字狀態(tài)給定的模塊的模塊讀取可以通過(guò)讀取它依賴模塊讀取。 換句話說(shuō),如果模塊B根據(jù)requires public引用了模塊C提供的包,則該包可由可以讀取模塊B的模塊A讀取。
- 通過(guò)使用關(guān)鍵字的在Java模塊系統(tǒng)便于“經(jīng)由服務(wù)接口和服務(wù)提供商的程序組件的松耦合” provides ... with ...以指示何時(shí)一個(gè)模塊提供的服務(wù)的實(shí)現(xiàn),并通過(guò)使用關(guān)鍵字uses指示模塊何時(shí)使用提供的服務(wù)。
- 因?yàn)榻o定的類與單個(gè)模塊關(guān)聯(lián),所以Class::getModule()將允許訪問(wèn)類的關(guān)聯(lián)模塊。
- “每個(gè)類加載器都有一個(gè)唯一的未命名模塊 ”,從中加載與模塊公開(kāi)的包無(wú)關(guān)的類型。 可以使用新方法ClassLoader::getUnnamedModule檢索給定的類加載器的未命名模塊。
- 未命名的模塊可以讀取所有其他模塊,并且可以被所有其他模塊讀取。
- “ JMOD”是“新工件格式”的“臨時(shí)”名稱,“新工件格式”“超出JAR文件”,用于保存“本機(jī)代碼,配置文件和其他自然不適合…放入JAR文件中的數(shù)據(jù)”。 目前,這是JDK的一部分,有可能在以后的Java SE中進(jìn)行標(biāo)準(zhǔn)化。
上面概述的項(xiàng)目不包括“模塊系統(tǒng)狀態(tài)”中涵蓋的“高級(jí)主題”,例如合格的出口,增加的可讀性和層次。 原始文檔也值得一讀,因?yàn)樗哂懈钊氲恼f(shuō)明,簡(jiǎn)短的代碼清單和說(shuō)明性圖形。
拼圖項(xiàng)目和OSGi
與OSGi一樣,Project Jigsaw旨在在基于Java的應(yīng)用程序中實(shí)現(xiàn)更大的模塊化。 我期待看到內(nèi)置的模塊化支持是否可以提供與OSGi提供的某些相同的優(yōu)點(diǎn),同時(shí)消除或減少與OSGi相關(guān)的一些缺點(diǎn)。 杰西卡·桑恩斯比(Jessica Thornsby)在Mule Drop OSGi For Beo 太復(fù)雜的文章中,總結(jié)了一些開(kāi)發(fā)人員對(duì)OSGi的劣勢(shì)的看法,這些想法導(dǎo)致Spring和Mule等停止使用OSGi。 Thornsby的文章引用了Dmitry Sklyut , Kirk Knoerschild和Ian Skerrett的話 ,他們認(rèn)為更好的工具,更好的文檔(包括社區(qū)),在會(huì)議上更好的曝光以及通過(guò)使用獲得更多的熟悉度將有助于OSGi的采用并有助于克服被認(rèn)為是艱難的學(xué)習(xí)曲線和復(fù)雜性。
我很好奇,如果Java平臺(tái)內(nèi)置的模塊化功能幾乎可以自動(dòng)帶來(lái)OSGi倡導(dǎo)者認(rèn)為可以提高OSGi的采用率的某些功能。 我懷疑Project Jigsaw通過(guò)內(nèi)置到平臺(tái)中會(huì)獲得更好的工具支持,更好地面向一般Java開(kāi)發(fā)人員,并且會(huì)在Java開(kāi)發(fā)人員社區(qū)(博客,會(huì)議,書(shū)籍等)中得到更廣泛和廣泛的覆蓋。 憑借這些優(yōu)勢(shì),我還想知道Java 9和Jigsaw是否會(huì)導(dǎo)致OSGi的當(dāng)前用戶離開(kāi)OSGi,或者這些用戶是否會(huì)找到創(chuàng)造性的方式來(lái)將兩者一起使用或會(huì)做自己能做的事情(例如使用未命名的模塊)使用OSGi而不是拼圖。 由于OSGi可以在Java 9之前的Java版本上運(yùn)行,而Jigsaw僅在Java 9和更高版本上可以運(yùn)行,因此在Java 9的采用升溫之前,可能不會(huì)急于將基于OSGi的應(yīng)用程序遷移到Jigsaw。 Java 9的模塊化:與Project Jigsaw,Penrose和OSGi堆疊在一起,可以對(duì)當(dāng)前和即將到來(lái)的Java模塊化方法進(jìn)行有趣的討論。
引用/相關(guān)資源
- 模塊系統(tǒng)的狀態(tài)
- 馬克·雷因霍爾德(Mark Reinhold)的“ Java 9模塊狀態(tài)”的要點(diǎn) (包括視頻)
- Java模塊系統(tǒng):初步了解
- 拼圖快速入門(mén)
- Java 9中的模塊化:與Jigsaw,Penrose和OSGi堆疊
翻譯自: https://www.javacodegeeks.com/2015/09/jdk-9-highlights-from-the-state-of-the-module-system.html
總結(jié)
以上是生活随笔為你收集整理的JDK 9:模块系统状态的重点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 语文常识单选题
- 下一篇: 焊接电脑主板热风枪温度(主板拆焊热风枪要