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