有可能出自兼容性的考慮、或者是靈活性的考慮、又或者是考慮去除某些用戶(hù)心理上的FUD,或者幾者兼有之,反正Maven是支持Ant腳本的執(zhí)行的。(具體請(qǐng)看Guide to using Ant with Maven, http://maven.apache.org/guides/mini/guide-using-ant.html)
Maven將Ant作為一種包含的關(guān)系存在,我們可以想象的到Maven應(yīng)該是在某些方面有超越Ant的表現(xiàn)的,比如在功能上,Maven提供的網(wǎng)站生成與包依賴(lài)管理管理特色功能是Ant沒(méi)有原生提供的。
比如包依賴(lài)管理,包依賴(lài)管理真的是很強(qiáng)大且實(shí)用的功能,想想我們每個(gè)工程都有無(wú)數(shù)的第三方包需要管理,而這些包進(jìn)行人工管理(想想人工分析包的版本,第三方包與包之間的依賴(lài)等等)真的是一件令人痛苦的事情,引入包依賴(lài)管理后,包統(tǒng)一自動(dòng)管理是多么美妙的一件事情?當(dāng)然這個(gè)功能想用在Ant中也不是不行的!(具體可以看看江南白衣的<<做環(huán)保主義者,用Maven2 管理Java類(lèi)庫(kù)>>( http://www.aygfsteel.com/calvin/archive/2006/03/19/36098.html),由于是Ant去調(diào)用了Maven,Maven和Ant肯定是并存于工程中了,也許這樣會(huì)讓一些Ant的鐵桿Fans會(huì)覺(jué)得這樣在工程中并不干凈了,只是需要Maven提供的一個(gè)額外功能就引進(jìn)了整個(gè)Maven,如果是這樣, Ant+Ivy的組合對(duì)包進(jìn)行依賴(lài)管理可以是另一種選擇。
對(duì)于網(wǎng)站的生成,個(gè)人感覺(jué)這個(gè)Ant是可以做到的,提供對(duì)應(yīng)的插件就行了!在google中搜索到這個(gè)網(wǎng)站AntDoc web site(http://antdoc.free.fr)好像是提供了類(lèi)似功能,不過(guò)可惜的是我這里打開(kāi)不了這個(gè)網(wǎng)站,并不能肯定是否可行。
這樣子比較下來(lái),好像Ant與Maven又回到了原點(diǎn),至少M(fèi)aven能得到的,Ant一樣能做到。
總結(jié)一下,我們可不可以這樣子理解,Maven以一種包含的關(guān)系提供對(duì)Ant腳本的支持,只是在內(nèi)部Plug-in提供功能的基礎(chǔ)上提供了另一種選擇罷了,這樣的話(huà)我們?cè)贛aven中使用Ant并沒(méi)有脫離Maven所制定的標(biāo)準(zhǔn),仍然受到了Maven標(biāo)準(zhǔn)的約束。而Ant在調(diào)用Maven包管理,或者使用類(lèi)似功能的時(shí)候,只是類(lèi)似于命令行調(diào)用了對(duì)應(yīng)的命令(插件)罷了,而插件真正調(diào)用的,還是Maven的內(nèi)容。
我覺(jué)得至少可以看出Maven與Ant非競(jìng)爭(zhēng)對(duì)手的關(guān)系,必竟也都是一家人(都為Apache一級(jí)項(xiàng)目),我想還是項(xiàng)目粒度的問(wèn)題,兩人工具都有生存領(lǐng)域,在技術(shù)選型的時(shí)候,根據(jù)項(xiàng)目的特性再選擇對(duì)應(yīng)的工具吧。