通常,企業(yè)標準化一個單獨的生態(tài)系統(tǒng),比如Java和Maven或者Ruby和Rake。除此之外的其他構建系統(tǒng)主要用來處理本地組件和第三方組件。
總而言之,我們不能假設在自己企業(yè)的代碼庫里只會碰到一個構建系統(tǒng),就像我們也不能假設只用一種編程語言那樣。
我發(fā)現(xiàn)這條規(guī)則在實踐中很有用:一個開發(fā)者簽出代碼之后,應該能夠在他或她的本地開發(fā)機上順利地構建。
這暗示了我們應該標準化版本控制系統(tǒng),并且有一個單獨的接口來開始本地構建。
如果需要支持不止一個的構建系統(tǒng),就基本上意味著你需要把一個構建系統(tǒng)包裝成另一個。構建的復雜性會因此而被隱藏,并同時允許不止一個的構建系統(tǒng)。對某個特定構建不熟悉的開發(fā)者也能有望簽出代碼并且比較輕松地構建。
例如Maven適用于聲明式Java構建。Maven也能夠從自己的構建內部開始其他的構建。
通過這種方式,在以Java為中心的企業(yè)內的開發(fā)者可以期待以下命令總能構建企業(yè)的一個組件:
一個實際的例子是用Nullsoft NSIS Windows安裝系統(tǒng)來創(chuàng)建一個Java桌面應用安裝工具。Java組件用Maven來構建。當Java工件準備好了以后,Maven調用NSIS安裝器腳本來生成一個自包含的可執(zhí)行文件,可用于Windows安裝。
雖然Java桌面應用近來不那么時髦了,但是在某些領域內它們還是用得很廣。