Ant是軟件構建工具,Maven的定位是軟件項目管理和理解工具。Maven除了具備Ant的功能外,還增加了以下主要的功能:
1)使用Project Object Model來對軟件項目管理;
2)內置了更多的隱式規則,使得構建文件更加簡單;
3)內置依賴管理和Repository來實現依賴的管理和統一存儲;
4)內置了軟件構建的生命周期;
一 POM(Project Object Model)與項目管理
每一個Maven工程都包含一個pom.xml文件,其他存儲了該工程相關的信息,從而達到一定的項目管理的功能。例如包含了工程的配置,缺陷跟蹤系統信息,工程的組織,許可協議,工程的路徑,依賴等信息。
典型的pom.xml如下:
<project … >
<modelVersion>4.0.0</modelVersion>
<!-- The Basics -->
<groupId>...</groupId>
< artifactId>...</artifactId>
< version>...</version>
< packaging>...</packaging>
< dependencies>...</dependencies>
< parent>...</parent>
< dependencyManagement>...</dependencyManagement>
< modules>...</modules>
< properties>...</properties>
<!-- Build Settings -->
<build>...</build>
< reporting>...</reporting>
<!-- Project Meta Data -->
<name>...</name>
< description>...</description>
< url>...</url>
< inceptionYear>...</inceptionYear>
< licenses>...</licenses>
< organization>...</organization>
<developers>...</developers>
< contributors>...</contributors>
<!-- Environment -->
<issueManagement>...</issueManagement>
< ciManagement>...</ciManagement>
< mailingLists>...</mailingLists>
< scm>...</scm>
< prerequisites>...</prerequisites>
< repositories>...</repositories>
< pluginRepositories>...</pluginRepositories>
< distributionManagement>...</distributionManagement>
< profiles>...</profiles>
< /project>
二 隱形的規則和簡單的構建文件
Maven工程的目錄結構必須為如下的結構
Maven還有內置的構建生命周期,內置定義了build,test,package,deploy等task。
由於Maven工程目錄的規則和內置的構建生命周期,從而使得構建文件簡單,例如如下的構建文件中甚至沒有出現build,package等task的定義,但是我們已經可以調用wvm package等內置的task了:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>Maven Quick Start Archetype</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
三 依賴管理和Repository
Maven的dependence management用來管理所有此project的dependences,且在dependence repository中自動查找和下載dependence。
1) 依賴管理
例如工程以來MySQL如下:
<dependencyManagement>
< dependencies>
< dependency>
< groupId>mysql</groupId>
< artifactId>mysql-connector-java</artifactId>
< version>5.1.2</version>
< /dependency>
< dependencies>
< /dependencyManagement>
<dependency>
< groupId>mysql</groupId>
< artifactId>mysql-connector-java</artifactId>
< /dependency>
2)dependence repository
更好的辦法是公司或每個team有自己的repository,例如下圖:
四 構建生命周期的定義
構建生命周期顯式地定義了構建,測試,和發布的過程,是每個Maven工程的核心。Maven包含了3個內置的生命周期:default,clean和site。
1)default生命周期處理了工程的編譯,測試和部署,他一共包含20多個階段,主要的階段如下:
Validate: 驗證所有的工程信息是否可用且正確
Compile: 編譯源代碼
Test: 在一套framework下運行但願測試
Package: 以發布的格式打包編譯的代碼
Integration-test: 在集成測試環境中處理(部署)發布包
Verify: 檢測發布包是否正確可用
Install: 在本地的repository上安裝發布包
Deploy: 在遠程的repository上安裝發布包
以上的階段具有先后順序,執行某個階段時,此階段前的所有階段都會被自動地執行。
2)clean生命周期處理工程的清理工作,包含3個階段:pre-clean, clean, post-clean。
3)site生命周期處理工程site文檔的生成和部署,包含下列階段:
pre-site, site, post-site 和site-deploy,其中site-deploy用來將site文檔部署到指定的web server上。
轉:http://www.cnblogs.com/itech/archive/2011/11/01/2231837.html