Kinnear介紹了Java 9的目標,包括提升開發者效率和改進Java云API。在對Java 9相關的JEP進行了一番評述之后,她開始專注于Java平臺模塊化系統(JPMS)的話題。JPMS也就是Jigsaw項目或JSR 376。
Kinnear向參會人員問了三個有關模塊化的問題。
模塊遺漏問題。 模塊系統在構建模塊圖時會檢測遺漏的模塊。沖突問題。 在構建模塊圖時包的沖突問題也會被檢測到。變更內部API是否安全? 模塊系統可以確保無法從模塊外部訪問內部的API。Kinnear說,模塊可以被集成到已有的應用程序里,她還演示了包與模塊之間如何進行交互,解釋了模塊路徑和類路徑之間的區別。她還向開發者介紹了如何遷移到Java 9,特別是如何在遷移過程中保持向后兼容。
Oracle Java平臺組的首席架構師Mark Reinhold在2016年3月份的白皮書中描述了JPMS的目標。
可靠的配置 使用聲明式的程序組件依賴機制代替脆弱且容易出錯的類路徑機制。強封裝 組件可以聲明自己的哪些公共類型是可以被其他組件訪問哪些是不能被訪問的。社區的反應
Red Hat的JBoss架構副主席Scott Stark表達了他對JPMS存在的一些疑問,Red Hat認為這些問題是影響JPMS無法達成JSR提交目標的主要因素。Stark說:
Jigsaw是一個全新的模塊化系統,它可以很好地應用在Java上,但并沒有在生產環境里那些基于JVM的真實應用上大規模嘗試應用JPMS。很多應用程序可能無法使用Jigsaw,或者需要進行重大的重構才可以。
IBM和Red Hat公開表示他們不會為當前的JPMS投贊成票。
盡管沒有達成一致意見,Reinhold仍然提交了JSR 376公開預覽版,并聲明“這對于廣大的Java生態圈來說是最有益的,我們因此可以達成切實的目標”。在投票當天,他還向執行委員會(EC)提交了一封公開信,呼吁他們能夠為JSR 376投贊成票。不過,最終JSR 376仍然沒能通過投票。
投票之后
我們的主要疑問在于,JPMS有可能會顛覆開發者,但卻未能給他們帶來直接的好處。我們擔心因此會阻礙這項技術的大規模采用。我們希望JPMS能夠對最初的目標做更全面的調整,從而真正地解決開發者的痛點。比如,非公開包名稱沖突就與當前JSR“不互相干擾”和“強封裝”的目標不一致。而如果模塊能夠更加徹底地分離,那么就可以通過把包隱藏在模塊內部來支持相同包的多個復本同時存在。如此直觀的好處簡化了開發人員模塊化代碼的工作,也因此能夠加速JPMS的采用速度。
在與InfoWorld的一次訪談中,Reinhold嘗試著澄清人們對JPMS的誤解。關于人們反對無法在Java中使用Maven這一問題上,Reinhold說,這不是真的,“Maven可以在Java 9里使用”。不過他承認,Maven的插件可能無法正常運行,包括Surefire測試插件。
Reinhold確認了開發者最喜歡的一些庫、框架和工具可能無法在Java 9中使用,這是因為當下的一些因素造成的,不過他說在正式發布時可能可以解決這些問題。他指出,這些項目的維護者已經在使用Java 9搶先版,所以他們會為這些項目做好支持Java 9的準備。這也就是為什么一些項目已經可以使用Java 9,如Spring Boot和Hibernate Validator。
很多開發團隊認為,在他們將所有代碼、框架和庫模塊化之前就不能使用Java 9。Reinhold說這也是不對的。
開發人員可以在Java 9里繼續使用類路徑,不過因為Java 9有了模塊機制,所以開發人員就不再需要類路徑了。
倫敦Java社區共同創始人及jClarity CEO Martijn Verburg與InfoQ交流了他對JSR 376投票的看法。在談到JVM模塊化的好處時,他說:
它為Java代碼提供了更多的安全性;它隱藏了很多內部API或者不應該暴露給開發人員的API;不過需要為那些被隱藏的功能提供安全的替代方案。Java的運行時將變得更小,因為運行時被拆分成更小的模塊。Java 9將提供jlink工具,用于將應用程序部署在更小的運行時上,只安裝必要的組件。服務器端的應用程序就不需要把客戶端的GUI(如AWT何Swing)也包含在內。這樣,Java可以啟動得更快,可以在更小的設備上運行應用,在云端的部署也會更快。
IBM的高級技術研究員Tim Ellison最近表達了他對如何在JSR 376上達成共識的看法。他說:
我們希望看到修訂過的規范重新呈現給JCP執行委員會,也希望執行委員會能夠支持專家組的結論。IBM關心的是企業應用在遷移到Java 9時的兼容性問題。升級到Java 9對遷移有重大的影響,而JPMS的默認行為在這方面會提供很大的幫助。
JSR 376即將進入到終稿階段。在定稿之前可能還有一些小幅度的改動,不過整個過程充分展示了JCP致力于為Java提供更加強大的語言特性。感謝Oracle一直在主導這個規范,以及專家組在這個里程碑上所投入的大量精力。
Reinhold最近針對Java 9的GA版本發布日期提出了一個新的提議。他說:
為了迎接各種可能的結果,我建議保持6月22號的JDK 9初始候選版本發布日期不變,不過將GA版本的發布日期向后延期,為通過JCP流程爭取更多的時間。我提議將GA版本的發布日期向后延期8周,從7月27號調整為9月21號。
JSR 376的下一個投票日期是周一,也就是2017年6月26號。
參考資料
OSGi and Java 9 Modules Working Together by Neil Bartlett (November 13, 2015)Java 9, OSGi and the Future of Modularity (Part 1) by InfoQ (September 22, 2016)Java 9, OSGi and the Future of Modularity (Part 2) by InfoQ (October 4, 2016)Concerns Regarding Jigsaw (JSR 376, Java Platform Module System) by Scott Stark (April 14, 2017)IBM and Red Hat to Vote “No” on Java Modules (Jigsaw) by InfoQ (May 1, 2017)Mark Reinhold Confirms JPMS (Jigsaw) will be Submitted for Public Review, Despite Community Concernsby InfoQ (May 4, 2017)Twitter’s Vote on JSR 376 (Java Platform Module System) by Tony Printezis (May 10, 2017)Oracle’s Java Chief Debunks ‘Misconceptions’ about Java 9 by Paul Krill (May 17, 2017)Martijn Verburg on the JCP EC “No” Vote for the Java Platform Module System by InfoQ (May 19, 2017)Building Consensus on JSR 376 by Tim Ellison (May 26, 2017)Proposed Schedule Change for JDK 9 by Mark Reinhold (May 30, 2017)編輯后記
Michael Redlich是ETE的積極參與者,他從2008年開始作為ETE的參會者和演講者,2013年成為ETE指導委員會的成員。
查看英文原文:Oracle Defends the Java Module System