爲什麼Eclipse無法替代Maven

轉自:http://www.juvenxu.com/2010/06/02/why-eclipse-cannt-replace-maven/

聲明:此篇文章爲轉載。

總有那麼一批人認爲IDE是無比強大的,比如Eclipse,或者更強大的MyEclipse(你是不是在用破解版本?)。Eclipse的確非常、非常、非常的優秀,它能幫你自動編譯、幫你執行單元測試、幫你重構……我不想黑Eclipse,要黑的話拿Maven作爲對比也太愚蠢了,應該用IDEA纔對。我想說的是,Eclipse再強大也替代不了Maven這樣的自動化構建工具,爲什麼暱?

幾年前當我還沒有畢業的時候,我在一家很小的軟件公司實習,這家公司做一些政府項目,當時我們開發的是一個暫住人口管理系統。如果你懂中國,你應該明白這樣的公司,技術人員永遠是三流公民,單子都是老闆通過關係喝酒吃飯拉來的,你開發出來的東西過得去就行,那羣辦公室裏的大爺纔不需要你的產品爲他們提供多好的體驗,他們不在乎這一類體驗。因此,不要指望這樣的公司對技術有多大的追求。

當時初出茅廬的我還在研究什麼是Servlet,什麼是JSP,什麼是Tomcat,Eclipse也用得半生不熟的,哪還會去關心什麼自動化構建,事實上我壓根不知道世界上有自動化構建。我一遍又一遍的打包,部署到Tomcat,測試,然後修改,再打包……一個畢業不久的同事看我忙得不亦樂乎,就把MyEclipse的安裝包扔給我了(當然,是破解版),然後教我怎麼熱部署,隨改隨看,我對他真是感激地要死。

我知道,很多人就是這樣愛上MyEclipse的。

可是,IDE終究是隻是IDE,有些事情它做不好,就像你用一字螺絲刀去擰十字的螺絲,也許能湊活,但不可能順手。

用Eclipse你無法做到十分鐘構建,更別說持續集成了。什麼?你不知道什麼是”10 minutes build”,不知道什麼是”Continuous Integration”,那麼先買幾本書掃掃盲吧,例如《解析極限編程》、《敏捷開發的藝術》、《持續集成》。也許你會說“我知道那套敏捷的東西,可是我們公司在做CMMI評審呢,敏捷不適合我,十分鐘構建和持續集成也不適合我”,好吧,也許你認爲無窮裝逼的文檔適合你,那就別讀下去了,抱歉浪費了你幾分鐘時間。

在開發軟件的時候我們心裏要清楚,GUI的操作是很難、或者說不可能自動化的。所以你不可能讓電腦幫你點Eclipse中的“簽出源碼”、“清理項目”、(自動編譯就不用點了)、“Run As Test”、……等等按鈕。如果你希望將這些操作自動化,那麼就需要找一個命令行工具,例如Maven。

不要告訴我你用了myeclipse一鍵Build整個項目

如果你對自動化沒有什麼追求,你認爲點幾下鼠標(偶爾點錯)不是什麼大問題,那允許我再問你一個問題,你能保證你機器的Eclipse配置和你同事的Eclipse配置完全一樣麼?你保證不了吧?各自配各自的Build Class Path,各自裝了各種插件的各種版本,也許你用了正版的MyEclipse,可你同事用了破解版的(其實這種區別不會影響構建,呵呵)。各種微妙差異導致的後果是什麼?

你本機編譯、測試、打包、部署都沒問題,可到了你同事的機器上可能就死活不行,你們坐在一起研究了一下午,最後可能發現Build Class Path中一個依賴的版本不一致導致了這個問題。

或許你還會說,“我只要協調大家使用一致的Eclipse配置環境就可以避免這個問題”,好吧,假設你能做到。接下來的問題是,如果你的項目有幾十個或者上百個第三方依賴,它們還一直會變化,你怎麼處理?

“簡單!把所有不管有用沒用的jar文件都扔進去,然後再慢慢挑掉一點明顯不需要的,測一下就行”

是挺簡單的,我也這麼做過,不過問題很嚴重。你不能以黑盒的方式來管理項目的依賴。也許你不在乎最終的部署包無謂地增大了幾十兆,不在乎這些多餘的文件導致打包速度變慢。但是當依賴產生衝突的時候,你就不得不在乎了。一堆jar文件,大的、小的、帶版本號的、不帶版本號的……祝君好運。

所以你要一個依賴管理工具,例如Maven,或者Ant + Ivy,反正比Eclipse好。

也許你又會說,“我的項目也就10多個依賴,複製幾個jar挺簡單的,搞Maven那麼複雜做什麼?”,那麼我只能祝願你永遠只需要開發只有10多個依賴的項目,而又能保持工資每年增長25%。

如果你想避免重複勞動、儘早控制風險、更可靠地管理項目依賴,那麼就別把什麼事情都扔給Eclipse去做。

Remark:

CMMI全稱是Capability Maturity Model Integration, 即軟件能力成熟度模型集成,是由美國國防部與卡內基-梅隆大學和美國國防工業協會共同開發和研製的,其目的是幫助軟件企業對軟件工程過程進行管理和改進,增強開發與改進能力,從而能按時地、不超預算地開發出高質量的軟件。

Maven和Ivy的區別 :
Maven2,它是一個模塊化項目構建工具(Building a Project )。它能夠管理依賴、構建週期、測試、打包並且在倉庫中發佈你的製品。它是一個項目構建工具,領先於通常的構建工具(實際上它的第一個版本是在Ant之上的一層)。apacheivy2 對項目依賴的文件可以進行統一的管理,依賴於ant,它是一個管理(記錄、跟蹤、解析和報告)項目依賴的工具 (dependencytool).

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章