Maven

Maven

Maven是基於項目對象模型(POM),可以通過一小段描述信息來管理項目的構建,報告和文檔的軟體項目管理工具。 Maven 除了以程式構建能力為特色之外,還提供高級項目管理工具。由於 Maven 的預設構建規則有較高的可重用性,所以常常用兩三行 Maven 構建腳本就可以構建簡單的項目。由於 Maven 的面向項目的方法,許多 Apache Jakarta 項目發文時使用 Maven,而且公司項目採用 Maven 的比例在持續增長。 Maven這個單詞來自於意第緒語,意為知識的積累,最早在Jakata Turbine項目中它開始被用來試圖簡化構建過程。當時有很多項目,它們的Ant build檔案僅有細微的差別,而JAR檔案都由CVS來維護。於是Maven創始者開始了Maven這個項目,該項目的清晰定義包括,一種很方便的發布項目信息的方式,以及一種在多個項目中共享JAR的方式。

基本信息

介紹

mavenmaven

Maven是基於項目對象模型(POM),可以通過一小段描述信息來管理項目的編譯,測試,構建,報告和文檔的軟體項目管理工具和解決依賴關係的工具。

如果你已經有十次輸入同樣的Anttargets來編譯你的代碼、jar或者war、生成javadocs,你一定會自問,是否有一個重複性更少卻能同樣完成該工作的方法。Maven便提供了這樣一種選擇,將你的注意力從作業層轉移到項目管理層。Maven項目已經能夠知道如何構建和捆綁代碼,運行測試,生成文檔並宿主項目網頁.

Maven還提供了一套描述軟體構件和依賴的模型。採用groupId+artifactId+version的形式唯一確定一個構件,然後採用在pom檔案中的dependency中描述其依賴的構件,並且依賴是可以傳遞的。在運行時根據構件的依賴描述生成一個依賴的樹形結構。並提供依賴同意構件不同版本的依賴監測工具,避免出現一個類有兩個版本導致虛擬機載入類後出現不一致的情況。最終達到整理整個系統依賴關係,使可重用的構件能被重用。

主要特點

那么,Maven 和 Ant 有什麼不同呢?在回答這個問題以前,首先要強調一點:Maven 和 Ant 針對構建問題的兩個不同方面。Ant 為 Java 技術開發項目提供跨平台構建任務。Maven 本身描述項目的高級方面,它從 Ant 借用了絕大多數構建任務。因此,由於 Maven 和 Ant 代表兩個差異很大的工具,所以接下來只說明這兩個工具的等同組件之間的區別,如表 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,命令行選項定義的系統特性
  • 由,任務裝入的特性
  • 第一個定義最先被處理
    構建規則 構建規則更為動態(類似於程式語言),它們是基於, 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檔案,等等。

    常用命令

    Maven 相關圖片Maven 相關圖片

    mvn archetype:create 創建Maven項目

    mvn compile 編譯原始碼

    mvn deploy 發布項目

    mvn test-compile 編譯測試原始碼

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

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

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

    mvn package 根據項目生成的jar

    mvn install 在本地Repository中安裝jar

    mvn eclipse:eclipse 生成eclipse項目檔案

    mvnjetty:run 啟動jetty服務

    mvntomcat:run 啟動tomcat服務

    mvn clean package -Dmaven.test.skip=true:清除以前的包後重新打包,跳過測試類

    推薦書籍

    發文時中文版對maven介紹比較全的書籍是《Maven實戰》。

    電腦配置

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

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

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

    3. 修改”settings.xml” 檔案,在這個檔案中找到 d:/ work 這一行,進行修改。這一行代表了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檔案,

    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">

    4.0.0

    maventest

    maventest

    jar

    0.0.1-SNAPSHOT

    Maven Quick Start Archetype

    http:// maven.apac he. org

    junit

    junit

    3.8.1

    test

    在這xml檔案中添加Maven所依賴的Jar的名稱,也就是添加節點。

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

    org.apache.struts

    struts2-core

    2.0.11

    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伺服器部署站點生成檔案。

    Maven生命周期參考:Apache Maven Project

    ,書籍《Maven In Action》

    相關詞條

    相關搜尋

    熱門詞條

    聯絡我們