Oracle Java Platform Group 的首席架構(gòu)師 Mark Reinhold 向 JCP 執(zhí)行委員會(huì)提交了一封公開(kāi)信。在公開(kāi)信中,他表示對(duì) IBM 投了 JSR 376 反對(duì)票一事感到震驚,并爭(zhēng)辯說(shuō),Red Hat 之所以也投反對(duì)票,是出于“保護(hù)他們自家的非標(biāo)準(zhǔn)模塊化系統(tǒng),而這個(gè)系統(tǒng)在 JBoss/Wildfly 之外的生態(tài)系統(tǒng)并沒(méi)有多少用武之地”。他進(jìn)一步辯解說(shuō):
在你們考慮如何投出你們手中寶貴的一票之前,我建議你們先對(duì)這一規(guī)范的價(jià)值做一個(gè)考量,并仔細(xì)考慮你們的投票將會(huì)對(duì)未來(lái)帶來(lái)的深遠(yuǎn)影響。
因?yàn)閷<医M缺少統(tǒng)一的意見(jiàn)就投反對(duì)票,這無(wú)異于在反對(duì) JCP 本身。JCP 的存在并不是為了強(qiáng)制達(dá)成統(tǒng)一意見(jiàn),它需要正當(dāng)充分的理由。它賦予規(guī)范制定者充分的決策權(quán),防止專家組成員因?yàn)樽约旱膫€(gè)人興趣而妨礙到整個(gè)進(jìn)程。如果你們放棄了你們的權(quán)利,那么未來(lái)的 JSR 就變成了“專家團(tuán)”的自我表演。
很多失敗的技術(shù)都是這么來(lái)的。
我不希望Java的未來(lái)會(huì)是這個(gè)樣子。
作為回應(yīng),來(lái)自 Red Hat 的 David Lloyd 提出了一些比較突出的問(wèn)題,簡(jiǎn)單概括如下。
在運(yùn)行時(shí)允許模塊間存在環(huán)。 模塊原始補(bǔ)丁(雖然很小)會(huì)被重新計(jì)算(在必要情況下進(jìn)行分階段)。 在模塊路徑間提供了包命名隔離。Lloyd 補(bǔ)充說(shuō):
我們擔(dān)心針對(duì)反射所做的變更對(duì)于社區(qū)來(lái)說(shuō)太過(guò)劇烈,而且還有可能對(duì)執(zhí)行委員會(huì)和專家組造成很大影響。我認(rèn)為,在專家組達(dá)成一致意見(jiàn)之前,我們還是保持現(xiàn)狀。
在模塊路徑命名方面,Reinhold 提交了一個(gè)更新提案 #AutomaticModuleNames,為了更好地與 Maven 兼容,如果 JAR 包里包含了 pom.properties,可以將 Maven 的 group identifier 包含進(jìn)來(lái),這樣模塊命名就不太可能發(fā)生沖突。
#AutomaticModuleNames 允許開(kāi)發(fā)者將他們的代碼拆分成多個(gè)模塊,而無(wú)需等待他們所使用的類庫(kù)或框架支持 Jigsaw。
這一提案的關(guān)鍵之處在于, JAR 包里的一個(gè) manifest 屬性 Automatic-Module-Name。當(dāng) JAR 被放進(jìn)模塊路徑時(shí),這個(gè)屬性的值會(huì)被用作模塊的名字。如果模塊路徑里的 JAR 包沒(méi)有提供這個(gè)屬性,那么模塊的名字就需要通過(guò)基于文件名的算法來(lái)計(jì)算得出。Reinhold 建議說(shuō):
通過(guò)這種機(jī)制,類庫(kù)的維護(hù)者就可以很方便地維護(hù)一個(gè)穩(wěn)定的模塊。例如,在 Maven 里,通過(guò) “pom.xml”里的幾行代碼就可以添加 manifest 屬性。類庫(kù)維護(hù)者在一開(kāi)始就聲明一個(gè)穩(wěn)定的模塊名,不需要等待它的依賴庫(kù)實(shí)現(xiàn)模塊化,而依賴該類庫(kù)的軟件包和應(yīng)用可以立即實(shí)現(xiàn)模塊化。
Oracle 已經(jīng)在 Java 模塊系統(tǒng)提案上進(jìn)行了大量的工作,從 JSR 277 開(kāi)始,至今已經(jīng)有 12 年的時(shí)間。最初計(jì)劃在 Java 7 里發(fā)布,后來(lái)延期到 Java 8,現(xiàn)在是 Java 9。這一提案從一開(kāi)始就飽受爭(zhēng)議。不過(guò),到目前為止,社區(qū)方面已經(jīng)對(duì) Jigsaw 方案達(dá)成廣泛的共識(shí),Jigsaw 為分解 JDK 提供了必要的方案。問(wèn)題在于,如果在 Java 9 里加入 Jigsaw,那么很多 Java 工具就無(wú)法工作。
查看英文原文: Reinhold Publishes Open Letter to JCP Pleading That JPMS (Jigsaw) Is Approved