Maven項(xiàng)目對(duì)象模型(POM),可以通過(guò)一小段描述信息來(lái)管理項(xiàng)目的構(gòu)建,報(bào)告和文檔的項(xiàng)目管理工具軟件。
Maven 除了以程序構(gòu)建能力為特色之外,還提供高級(jí)項(xiàng)目管理工具。由于 Maven 的缺省構(gòu)建規(guī)則有較高的可重用性,所以常常用兩三行 Maven 構(gòu)建腳本就可以構(gòu)建簡(jiǎn)單的項(xiàng)目。由于 Maven 的面向項(xiàng)目的方法,許多 Apache Jakarta 項(xiàng)目發(fā)文時(shí)使用 Maven,而且公司項(xiàng)目采用 Maven 的比例在持續(xù)增長(zhǎng)。
Maven這個(gè)單詞來(lái)自于意第緒語(yǔ)(猶太語(yǔ)),意為知識(shí)的積累,最初在Jakata Turbine項(xiàng)目中用來(lái)簡(jiǎn)化構(gòu)建過(guò)程。當(dāng)時(shí)有一些項(xiàng)目(有各自Ant build文件),僅有細(xì)微的差別,而JAR文件都由CVS來(lái)維護(hù)。于是希望有一種標(biāo)準(zhǔn)化的方式構(gòu)建項(xiàng)目,一個(gè)清晰的方式定義項(xiàng)目的組成,一個(gè)容易的方式發(fā)布項(xiàng)目的信息,以及一種簡(jiǎn)單的方式在多個(gè)項(xiàng)目中共享JARs。
那么,Maven 和 Ant 有什么不同呢?在回答這個(gè)問(wèn)題以前,首先要強(qiáng)調(diào)一點(diǎn):Maven 和 Ant 針對(duì)構(gòu)建問(wèn)題的兩個(gè)不同方面。Ant 為 Java 技術(shù)開(kāi)發(fā)項(xiàng)目提供跨平臺(tái)構(gòu)建任務(wù)。Maven 本身描述項(xiàng)目的高級(jí)方面,它從 Ant 借用了絕大多數(shù)構(gòu)建任務(wù)。因此,由于 Maven 和 Ant代表兩個(gè)差異很大的工具,所以接下來(lái)只說(shuō)明這兩個(gè)工具的等同組件之間的區(qū)別,如表 1 所示。
Maven |
Ant |
|
標(biāo)準(zhǔn)構(gòu)建文件 |
project.xml 和 maven.xml |
build.xml |
特性處理順序 |
${maven.home}/bin/driver.properties ${project.home}/project.properties ${project.home}/build.properties ${user.home}/build.properties 通過(guò) -D 命令行選項(xiàng)定義的系統(tǒng)特性 最后一個(gè)定義起決定作用。 |
通過(guò) -D 命令行選項(xiàng)定義的系統(tǒng)特性 由 任務(wù)裝入的特性 第一個(gè)定義最先被處理。 |
構(gòu)建規(guī)則 |
構(gòu)建規(guī)則更為動(dòng)態(tài)(類似于編程語(yǔ)言);它們是基于 Jelly 的可執(zhí)行 XML。 |
構(gòu)建規(guī)則或多或少是靜態(tài)的,除非使用 |