在OpenJDK郵件列表的一封郵件中,Oracle的JDK工程師Joe Darcy提議將JDK 10 OpenJDK的Mercurial(又稱“Hg”,意思為水銀)源碼資源群(repositories)合并為一個(gè)單一資源庫。
目前JDK 9 OpenJDK是Hg資源群結(jié)構(gòu),即由多個(gè)相關(guān)的Hg資源庫組成。JDK 9的這個(gè)資源群由8個(gè)資源庫組成:
root corba hotspotjaxp jaxws jdk langtools nashorn提議合并的動(dòng)機(jī)始于JEP 296,目的是消除維護(hù)多個(gè)資源庫所帶來的不利因素。例如,以現(xiàn)在的集群結(jié)構(gòu),無法將一個(gè)bug的修復(fù)傳播到群內(nèi)的多個(gè)資源庫。單一資源庫的一個(gè)好處是,可以追蹤一堆文件的變更歷史而不僅僅是單個(gè)文件。
JEP中其他可選的提案是(a)保持現(xiàn)有的Hg資源群、(b)只合并這些資源群的核心子集,但后者被否決了。同時(shí)也決定不將JavaFX包含到Hg資源群中。
盡管在提案中已包含了對(duì)預(yù)期到的疑問的回答,但還是引起了貢獻(xiàn)者們對(duì)其擴(kuò)展性、性能以及其他麻煩的討論,特別在這篇回復(fù)中提出了一系列問題。為了將注意力引回到“大局”中,Oracle語言架構(gòu)師Brian Goetz這樣解釋:
利益相關(guān)者不僅僅只有OpenJDK的開發(fā)者們。像其他開發(fā)人員一樣,把代碼維護(hù)在一個(gè)線性的、事務(wù)級(jí)更新的資源庫中,可以增加項(xiàng)目的可行性,減少使用‘bisect’等工具檢查問題引入源所花費(fèi)的代價(jià)。同時(shí)也減少了軟件測試環(huán)境相關(guān)的成本,并提升了產(chǎn)品質(zhì)量,這對(duì)我們大家都有好處。同時(shí)David Lloyd指出了其他與工具相關(guān)的優(yōu)勢,如更方便地維護(hù)一個(gè)git鏡像。
目前主要的反對(duì)聲是來自于“(我認(rèn)為他們會(huì))讓開發(fā)變得困難”的想法。這很正常,人們?yōu)樽约恨q護(hù)無可厚非。但是別忘了這樣做給*大家*所帶來的巨大好處,在判斷利弊時(shí)要將這點(diǎn)也考慮進(jìn)去。
這不是Oracle第一次試圖清理OpenJDK的Hg資源群。早在2013年11月,Darcy就提議“JDK 9使用替代的資源群結(jié)構(gòu),進(jìn)而顯著縮短資源群內(nèi)bug修復(fù)的傳播時(shí)間。”
相關(guān)資源
為驗(yàn)證Hg資源群的合并,已經(jīng)創(chuàng)建了一個(gè)原型,可以在此下載它的Python支持腳本(具體說明如下)。
這個(gè)原型包含了8個(gè)資源庫,并通過Python腳本進(jìn)行合并。變更歷史、變更注釋和原始的創(chuàng)建時(shí)間都會(huì)被保留。合并后的單一資源庫將包含一個(gè)頂級(jí)src目錄。例如:
$ROOT/jdk/src/java.base
$ROOT/langtools/src/java.compiler
合并為
$ROOT/src/java.base
$ROOT/src/java.compiler
查看英文原文:Proposed Consolidation of JDK 10 OpenJDK Mercurial Repositories
感謝冬雨對(duì)本文的審校。