簡介

Maven是基於項目對象模型(POM),可以通過一小段描述信息來管理項目的構建,報告和文檔的軟件項目管理工具。

目前,絕大多數開發人員都把 Ant 當作 Java 編程項目的標準構建工具。遺憾的是,Ant 的項目管理工具(作為 make的替代工具)不能滿足絕大多數開發人員的需要。通過檢查 Ant 構建文件,很難發現項目的相關性信息和其它元信息(如開發人員/擁有者、版本或站點主頁)。

Maven 除了以程序構建能力為特色之外,還提供 Ant 所缺少的高級項目管理工具。由於 Maven 的缺省構建規則有較高的可重用性,所以常常用兩三行 Maven 構建腳本就可以構建簡單的項目,而使用 Ant 則需要十幾行。事實上,由於 Maven 的面向項目的方法,許多 Apache Jakarta 項目現在使用 Maven,而且公司項目採用 Maven 的比例在持續增長。

Maven這個單詞來自於意第緒語,意為知識的積累,最早在Jakata Turbine項目中它開始被用來試圖簡化構建過程。當時有很多項目,它們的Ant build文件僅有細微的差別,而JAR文件都由CVS來維護。於是Maven創始者開始了Maven這個項目,該項目的清晰定義包括,一種很方便的發佈項目信息的方式,以及一種在多個項目中共享JAR的方式。 [1]

編輯本段特點

那麼,Maven 和 Ant 有什麼不同呢?在回答這個問題以前,我要強調一點:Maven 和 Ant 針對構建問題的兩個不同方面。Ant 為 Java 技術開發項目提供跨平台構建任務。Maven 本身描述項目的高級方面,它從 Ant 借用了絕大多數構建任務。因此,由於 Maven 和 Ant 代表兩個差異很大的工具,所以我將只説明這兩個工具的等同組件之間的區別,如表 1 所示。[1]


Maven

Ant

標準構建文件

project.xml 和 maven.xml

build.xml

特性處理順序

${maven.home}/bin/driver.properties

${project.home}/project.properties

${project.home}/build.properties

${user.home}/build.properties

通過 -D 命令行選項定義的系統特性

最後一個定義起決定作用。

通過 -D 命令行選項定義的系統特性

由 <property> 任務裝入的特性

第一個定義最先被處理。

構建規則

構建規則更為動態(類似於編程語言);它們是基於 Jelly 的可執行 XML。

構建規則或多或少是靜態的,除非使用 <script> 任務。(請參閲 參考資料以獲得相關教程。)

擴展語言

插件是用 Jelly(XML)編寫的。

插件是用 Java 語言編寫的。

構建規則可擴展性

通過定義 <preGoal> 和 <postGoal> 使構建 goal 可擴展。

構建規則不易擴展;可通過使用 <script> 任務模擬 <preGoal> 和 <postGoal> 所起的作用。

Maven是一個項目管理工具,它包含了一個項目對象模型 (Project Object Model),一組標準集合,一個項目生命週期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來運行定義在生命週期階段(phase)中插件(plugin)目標(goal)的邏輯。當你使用Maven的時候,你用一個明確定義的項目對象模型來描述你的項目,然後Maven可以應用橫切的邏輯,這些邏輯來自一組共享的(或者自定義的)插件。

Maven 有一個生命週期,當你運行 mvn install 的時候被調用。這條命令告訴 Maven 執行一系列的有序的步驟,直到到達你指定的生命週期。遍歷生命週期旅途中的一個影響就是,Maven 運行了許多默認的插件目標,這些目標完成了像編譯和創建一個 JAR 文件這樣的工作。

此外,Maven能夠很方便的幫你管理項目報告,生成站點,管理JAR文件,等等。

編輯本段常用命令

mvn archetype:create 創建Maven項目

mvn compile 編譯源代碼

mvn test-compile 編譯測試源代碼

mvn test 運行應用程序中的單元測試

mvn site 生成項目相關信息的網站

mvn clean 清除項目目錄中的生成結果

mvn package 根據項目生成的jar

mvn install 在本地Repository中安裝jar

mvn eclipse:eclipse 生成eclipse項目文件

mvn jetty:run 啓動jetty服務

mvn tomcat:run 啓動tomcat服務

編輯本段推薦書籍

目前中文版對maven介紹比較全的書籍是《Maven實戰》

編輯本段Win7配置

現在Java新架構的不斷出現,例如Struts,Spring,Hibernate等,項目的配置文件的增多,給開發人員帶來很大麻煩。在實際的開發當中,Myeclipse中的project越來越龐大,所依賴的第三方Jar包越來越多,這顯得Project很臃腫,給項目管理帶來了很大不便,尤其是在一些大型項目。為了解決上述問題,Apache開源組織發佈了Maven[2],它適用於大的Java項目。

系統及環境:Win7 ,Jdk1.6 ,Myeclipse7.5。

首先要安裝Jdk1.6 和 Myeclipse7.5 。

1. Maven有一個重要的文件"settings.xml“,這個文件來源於apache-maven-2.0.8/conf/ 下,要放在windows下, Win7和Winxp還是有點不一樣 , Win7 ---C:\Users\用户名\.m2 , Winxp ---C:\Documents and Settings\用户名\.m2 。

2. 設置Maven的環境變量,基本上和設置Jdk環境變量相似,首先設置MAVEN_HOME,再加入Path 。

3. 修改”settings.xml” 文件,在這個文件中找到<localRepository>d:/work</localRepository>這一行,進行修改。這一行代表了Maven的Jar包倉庫的位置。work下放的都是項目所用到的jar包,每個Project都可以共用一個work。

4. Myeclipse7.5及以上版本本身自帶Maven插件。如果使用低版本的Myeclipse需要安裝插件,在help菜單中選擇software updates,選擇find and install,選擇search for new features to install-選擇new remote site。寫入 name:maven URL:http:// m2eclipse.codehaus . org/update/去下載相關jar包和插件。

5. 在Myeclipse中windows-perferences中,在下圖的位置上,查看users settings的路徑是否正確。

6. 建立Maven的project,File--new—other—Java Maven Project

7. 然後打開project裏pom.xml文件,

<project xmlns="http:// maven.apache. org/POM/4.0.0"xmlns:xsi="http://www .w3. org/2001/XMLSchema-instance"

xsi:schemaLocation="http: //maven .apache .o rg/POM/4.0.0http: //m aven.apache . org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>maventest</groupId>

<artifactId>maventest</artifactId>

<packaging>jar</packaging>

<version>0.0.1-SNAPSHOT</version>

<name>Maven Quick Start Archetype</name>

<url>http:// maven.apac he. org</url>

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>3.8.1</version>

<scope>test</scope>

</dependency>

</dependencies>

</project>

在這xml文件中添加Maven所依賴的Jar的名稱,也就是添加<dependency></dependency>節點。

例如:添加大家常用的Struts Jar包

<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-core</artifactId>

<version>2.0.11</version>

</dependency>

8. 到現在為止,環境就算搞定了。接下來要應用Maven來打包Project為大家服務的。

在cmd中的命令:

a. mvn eclipse:clean 清除Project中以前的編譯的東西,重新再來

b. mvn eclipse:eclipse 開始編譯Maven的Project

在Myeclipse中的操作:

a. 選中Maven Project 右擊 在Run As中選擇Maven clean

b. 在Myeclipse中,Project—Clean 開始編譯

c. 選中Maven Project 右擊 在Run As中選擇Maven install

執行完這幾步,如果沒發生異常,會在project裏生成一個target文件夾,這個文件夾裏的東西,就是Maven打包發佈的東西。

編輯本段生命週期

Maven的生命週期是為了對所有的構建過程進行了抽象了,便於統一。

clean(清理)

此生命週期旨在給工程做清理工作,它主要包含以下階段:

pre-clean - 執行項目清理前所需要的工作。

clean - 清理上一次build項目生成的文件。

post-clean - 執行完成項目清理所需的工作.

default(默認)

validate - 驗證項目是否正確且所有必要的信息都可用。

initialize - 初始化構建工作,如:設置參數,創建目錄等。

generate-sources - 為包含在編譯範圍內的代碼生成源代碼.

process-sources - 處理源代碼, 如過濾值.

generate-resources -

process-resources - 複製並處理資源文件,至目標目錄,準備打包。

compile - 編譯項目中的源代碼.

process-classes - 為編譯生成的文件做後期工作, 例如做Java類的字節碼增強.

generate-test-sources - 為編譯內容生成測試源代碼.

process-test-sources - 處理測試源代碼。

generate-test-resources -

process-test-resources - 複製並處理資源文件,至目標測試目錄。

test-compile - 將需測試源代碼編譯到路徑。一般來説,是編譯/src/test/java目錄下的java文件至目標輸出的測試classpath目錄中。

process-test-classes -

test - 使用合適的單元測試框架運行測試。這些測試代碼不會被打包或部署。

prepare-package -

package - 接受編譯好的代碼,打包成可發佈的格式,如 JAR 。

pre-integration-test -

integration-test - 按需求將發佈包部署到運行環境。

post-integration-test -

verify -

install -將包安裝到本地倉庫,給其他本地引用提供依賴。

deploy -完成集成和發佈工作,將最終包複製到遠程倉庫以便分享給其他開發人員。

site(站點)

pre-site - 執行一些生成項目站點前的準備工作。

site - 生成項目站點的文檔。

post-site - 執行需完成站點生成的工作,如站點部署的準備工作。

site-deploy - 向制定的web服務器部署站點生成文件。[3]

Maven生命週期參考:Apache Maven Project[3],書籍《Maven In Action》