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