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