日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Apache Maven 2 简介

發(fā)布時間:2025/5/22 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Apache Maven 2 简介 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

級別: 中級

Sing Li (westmakaha@yahoo.com), 作家, Wrox Press

2007 年 1 月 08 日

現(xiàn)代軟件項(xiàng)目不再是單個本地團(tuán)隊(duì)獨(dú)立開發(fā)的產(chǎn)物。隨著健壯的企業(yè)級開源組件的可用性日益提高,當(dāng)今的軟件項(xiàng)目需要項(xiàng)目團(tuán)隊(duì)間的動 態(tài)協(xié)作,往往也需要混合使用在全球范圍內(nèi)創(chuàng)建和維護(hù)的組件。如今,Apache Maven 構(gòu)建系統(tǒng)步入了第二代,它和由 Internet 帶來的全球軟件開發(fā)時代之前所創(chuàng)建的那些遺留構(gòu)建工具不同,它完全是重新設(shè)計的,以應(yīng)對這些現(xiàn)代的挑戰(zhàn)。本教程將帶您從頭領(lǐng)略 Maven 2。

開始之前

現(xiàn)代軟件開發(fā)基于健壯的企業(yè)級開源技術(shù),它需要一類新的構(gòu)建工具和項(xiàng)目協(xié)作工具。Apache Maven 2 的核心引擎旨在簡化往往十分復(fù)雜的大型協(xié)作性軟件項(xiàng)目的構(gòu)建和管理。在大型項(xiàng)目團(tuán)隊(duì)環(huán)境中工作是種挑戰(zhàn),而 Maven 2 以友好為設(shè)計目的,即便對那些不熟悉這種挑戰(zhàn)的開發(fā)人員而言,Maven 2 也足夠友好。本教程首先圍繞單個的新手開發(fā)展開,然后逐漸介紹 Maven 2 中的一些協(xié)作性的概念和功能。我們鼓勵您在本教程提供的介紹之上,探究本文范圍之外的 Maven 2 的一些高級功能。

關(guān)于本教程

本教程將循序漸進(jìn)地向您介紹有關(guān) Maven 2 的基礎(chǔ)概念和實(shí)踐練習(xí),具體內(nèi)容包括:

  • Maven 2 概覽
  • 理解 Maven 2 依賴項(xiàng)管理模型
  • Maven 2 存儲庫和 Maven 2 坐標(biāo)
  • Maven 2 生命周期、階段、插件和 mojo
  • 下載和安裝 Maven 2
  • 實(shí)踐 Maven 2 —— 您的第一個 Maven 2 項(xiàng)目
  • 定制項(xiàng)目對象模型(POM)
  • 參與多個項(xiàng)目
  • 實(shí)踐 Maven 2 —— 參與多個項(xiàng)目構(gòu)建
  • 在 Eclipse 3.2 中安裝 Maven 2.x Plug-in
  • 在 Eclipse 3.2 中使用 Maven 2.x Plug-in

讀完本教程,您會理解并欣賞 Maven 2 背后的設(shè)計理念。也將進(jìn)一步熟悉在使用 Maven 2 構(gòu)建的項(xiàng)目中工作所需的基本技能。這是一張通往 Apache 和 Codehaus 社區(qū)中大多數(shù)大型項(xiàng)目的通行證。最為重要的是,您將可以把 Maven 2 應(yīng)用到日常的項(xiàng)目構(gòu)建和管理活動中。





回頁首


先決條件

您應(yīng)當(dāng)大體上熟悉 Java? 開發(fā)。本教程假設(shè)您理解構(gòu)建工具的價值和基本操作,包括依賴項(xiàng)管理和輸出打包。要求您能將 Eclipse 3.2 用作 IDE,從而在 Eclipse 中使用 Maven 2.x 插件。如果您熟悉大型開源項(xiàng)目(如 Apache 軟件基金會管理下的項(xiàng)目),那就太好了。理解 Java 5 編碼(包括泛型)會很有幫助。如果有各種項(xiàng)目構(gòu)建技術(shù)的經(jīng)驗(yàn)(如 Ant、autoconf、make 和 nmake)也很好,但不做強(qiáng)制性要求。





回頁首


系統(tǒng)需求

為繼續(xù)學(xué)習(xí)和試驗(yàn)本教程中的代碼,您需要有效安裝 Sun's JDK 1.5.0_09 (或其后的版本)或 IBM JDK 1.5.0 SR3。

針對教程中關(guān)于 Eclipse 的 Maven 2.x 的插件部分,需要有效安裝 Eclipse 3.2.1 或其后版本。

本教程的推薦系統(tǒng)配置如下:

  • 支持上述 JDK/JRE 的系統(tǒng),有至少 1GB 的主存
  • 有至少 20MB 的磁盤空間來安裝軟件組件和樣例

本教程中的說明基于 Microsoft Windows 操作系統(tǒng)。教程中涵蓋的所有工具也可以在 Linux? 和 UNIX? 系統(tǒng)上運(yùn)行。

Maven 2 概覽

Maven 是一個頂級的 Apache Software Foundation 開源項(xiàng)目,創(chuàng)建它最初是為了管理 Jakarta Turbine 項(xiàng)目復(fù)雜的構(gòu)建過程。從那以后,不論是開源開發(fā)項(xiàng)目還是私有開發(fā)項(xiàng)目都選擇 Maven 作為項(xiàng)目構(gòu)建系統(tǒng)。Maven 快速地發(fā)展著,如今已是第二版,Maven 已經(jīng)從針對單個復(fù)雜項(xiàng)目的定制構(gòu)建工具成長為廣泛使用的構(gòu)建管理系統(tǒng),其豐富的功能可以應(yīng)用于大多數(shù)的軟件開發(fā)場景。

概括來講,Maven 2 能夠:

  • 理解項(xiàng)目通常是如何構(gòu)建的。

  • 利用其內(nèi)嵌的項(xiàng)目知識簡化和便利項(xiàng)目構(gòu)建。

  • 利用其內(nèi)嵌的項(xiàng)目知識來幫助用戶理解復(fù)雜的項(xiàng)目結(jié)構(gòu)和構(gòu)建過程中潛在的變數(shù)。

  • 設(shè)計并實(shí)現(xiàn)一個經(jīng)證實(shí)的依賴項(xiàng)管理系統(tǒng),該系統(tǒng)順應(yīng)了當(dāng)今全球化和相互聯(lián)系的項(xiàng)目團(tuán)隊(duì)的需求。

  • 利用其內(nèi)部知識,針對簡單項(xiàng)目提供簡單的用戶體驗(yàn)。

  • 對于高級用戶來說相當(dāng)靈活;針對特別的應(yīng)用場景,可以覆蓋其內(nèi)嵌模型,也可以通過配置、部署元數(shù)據(jù)或創(chuàng)建自定義插件對其內(nèi)嵌模型進(jìn)行改寫。

  • 全面擴(kuò)展現(xiàn)有行為之外的場景細(xì)節(jié)。

  • 捕獲新出現(xiàn)的最佳實(shí)踐和各個用戶社區(qū)間的經(jīng)確認(rèn)的共同性,并將它們納入到 Maven 的內(nèi)嵌項(xiàng)目知識中,從而不斷地得到改進(jìn)。

Maven 2 —— 概念性的概覽

為捕捉項(xiàng)目構(gòu)建知識,Maven 2 依賴于一套發(fā)展中的有關(guān)事物如何運(yùn)轉(zhuǎn)的概念性模型。部分模型被硬編碼為 Maven 代碼庫的一部分,這些模型通過新的 Maven 發(fā)布版本不斷得到精煉。圖 1 解釋了 Maven 2 的關(guān)鍵模型:



圖 1. Maven 2 對象和操作模型

圖 1 中的關(guān)鍵組件為:

  • 項(xiàng)目對象模型(POM): POM 是 Maven 2 中的里程碑式的模型。該模型的一部分已經(jīng)構(gòu)建到 Maven 引擎(被親切地稱為反應(yīng)堆 )中,其余部分則通過一個名叫 pom.xml 的基于 XML 的元數(shù)據(jù)文件來聲明。

  • 依賴項(xiàng)管理模型: Maven 對如何管理項(xiàng)目的依賴項(xiàng)很在行。依賴項(xiàng)管理是一片灰色地帶,典型的構(gòu)建-管理工具和系統(tǒng)都未明確涉及。Maven 2 構(gòu)建了 Maven 依賴項(xiàng)管理模型,該模型能夠適應(yīng)大多數(shù)需求。這個模型被證明是有效而高產(chǎn)的模型,目前,主要的開源項(xiàng)目都部署了該模型。

  • 構(gòu)建生命周期和階段:和 POM 相關(guān)的概念是構(gòu)建生命周期 和階段。這是 Maven 2 的內(nèi)嵌概念模型和現(xiàn)實(shí)物理世界之間的接口。使用 Maven 時,工作主要是通過插件來執(zhí)行的。在構(gòu)建周期中,Maven 2 通過遵循一系列定義好的階段,將這些插件協(xié)調(diào)起來。

如果您對其中一些概念還有點(diǎn)模糊,請不要擔(dān)心。接下來的部分會用具體的例子來鞏固這些模型背后的概念。





回頁首


Maven 2 —— 物理概覽

圖 2 揭示了 Maven 2 的操作方式和與之交互的方式,同時顯示了它的物理構(gòu)成。圖 2 提供了有關(guān)如何與 Maven 進(jìn)行交互的概覽:



圖 2. Maven 2 操作和交互模型

圖 2 中,POM 是 Maven 對您的特定項(xiàng)目的理解。這個模型由包含在一系列 pom.xml 文件中的聲明性描述構(gòu)成。這些 pom.xml 文件構(gòu)成一棵樹,每個文件能從其父文件中繼承屬性。Maven 2 提供一個 Super POM。這個 Super POM 位于層級樹的頂端,它包含所有項(xiàng)目的默認(rèn)通用屬性;每個項(xiàng)目的 POM 都從這個 Super POM 處繼承。

依賴項(xiàng)被指定為 pom.xml 文件的一部分。Maven 根據(jù)其依賴項(xiàng)管理模型解析項(xiàng)目依賴項(xiàng)。Maven 2 在本地存儲庫和全球存儲庫尋找依賴性組件(在 Maven 術(shù)語里稱作工件 )。在遠(yuǎn)程存儲庫中解析的工件被下載到本地存儲庫中,以便使接下來的訪問可以有效進(jìn)行。Maven 2 中的這個依賴項(xiàng)解析器可以處理可遞 依賴項(xiàng)。即,它能有效地解析您的依賴項(xiàng)所依賴的那些依賴項(xiàng)。

Maven 引擎通過插件 親自執(zhí)行幾乎所有的文件處理任務(wù)。插件被配置和描述在 pom.xml 文件中。依賴項(xiàng)管理系統(tǒng)將插件當(dāng)作工件來處理,并根據(jù)構(gòu)建任務(wù)的需要來下載插件。每個插件都能和生命周期中的不同階段聯(lián)系起來。Maven 引擎有一個狀態(tài)機(jī),它運(yùn)行在生命周期的各個階段,在必要的時候調(diào)用插件。

理解 Maven 2 依賴項(xiàng)管理模型

在有效利用 Maven 2 之前,您需要理解 Maven 2 依賴項(xiàng)管理模型是如何運(yùn)行的。

依賴項(xiàng)開發(fā)適應(yīng)于這樣的項(xiàng)目,其軟件組件(稱作模塊 )是由不同的項(xiàng)目團(tuán)隊(duì)開發(fā)的。它支持持續(xù)獨(dú)立開發(fā),也支持對所有依賴模塊進(jìn)行精煉。

這個團(tuán)隊(duì)協(xié)作場景在通過 Internet 建立和維護(hù)的開源項(xiàng)目中十分常見,由于內(nèi)部開發(fā)大受開源或外包世界的沖擊和影響,這種場景在合作開發(fā)的圈子里日益盛行。

解析項(xiàng)目依賴項(xiàng)

Maven 2 依賴項(xiàng)管理引擎幫助解析構(gòu)建過程中的項(xiàng)目依賴項(xiàng)。

Maven 本地存儲庫和遠(yuǎn)程存儲庫

Maven 2 本地存儲庫是磁盤上的一個目錄,通常位于 HomeDirectory/.m2/repository。這個庫扮演著高性能本地緩存的角色,存儲著在依賴項(xiàng)解析過程中下載的工件。遠(yuǎn)程存儲庫要通過網(wǎng)絡(luò)訪問。可以在 settings.xml 配置文件中維護(hù)一個遠(yuǎn)程存儲庫列表以備使用。

實(shí)踐中,依賴項(xiàng)在 pom.xml 文件內(nèi)的 <dependencies> 元素中指定,并作為 POM 的一部分注入到 Maven 中。

項(xiàng)目依賴項(xiàng)存儲在存儲庫服務(wù)器(在 Maven 術(shù)語中簡單地稱之為存儲庫 )上。要成功的解析依賴項(xiàng),需要從包含該工件的存儲庫里找到所需的依賴性工件。

通過 settings.xml 配置 Maven

可以在一個 settings.xml 文件中指定影響 Maven 操作的配置屬性。默認(rèn)的設(shè)置文件是 MavenInstallationDirectory/conf/settings.xml。Maven 2 用戶可通過維護(hù) UserHomeDirectory/.m2/settings.xml 來覆蓋一些配置屬性。參見 Maven 設(shè)置參考,獲取更多有關(guān)可配置設(shè)置的信息。

基于 POM 中的項(xiàng)目依賴項(xiàng)信息,該依賴項(xiàng)解析器試圖以下列方式解析依賴項(xiàng):

  • 檢查本地存儲庫中的依賴項(xiàng)。
  • 檢查遠(yuǎn)程存儲庫列表中的依賴項(xiàng)。
  • 如果前兩步失敗,則報告一個錯誤。
  • 默認(rèn)情況下,第二步中所涉及的第一個遠(yuǎn)程存儲庫是一個能在全球訪問的集中式 Maven 2 存儲庫,它包含了最流行的開源項(xiàng)目的一些工件。在內(nèi)部開發(fā)中,可以設(shè)置額外的遠(yuǎn)程存儲庫來包含從內(nèi)部開發(fā)模塊中發(fā)布的工件。可以使用 settings.xml 中的 <repositories> 元素來配置這些額外的遠(yuǎn)程存儲庫。





    回頁首


    確保單個的工件

    將 Maven 2 用于項(xiàng)目構(gòu)建時,依賴項(xiàng)解析通過一個集中的存儲庫確保只存在一個依賴性工件,而不考慮有多少項(xiàng)目或子項(xiàng)目引用該工件。這是多模塊項(xiàng)目構(gòu)建中一個重要的屬性,因?yàn)榘鄠€工件會導(dǎo)致一些項(xiàng)目一致性和集成方面的問題。

    存儲庫和坐標(biāo)

    Maven 2 存儲庫存儲 Maven 在一個項(xiàng)目的依賴項(xiàng)解析中使用過的工件集。在本地磁盤上訪問本地存儲庫,通過網(wǎng)絡(luò)訪問遠(yuǎn)程存儲庫。

    工件通常被打包成包含二進(jìn)制庫或可執(zhí)行庫的 JAR 文件。這被認(rèn)為是工件的一個類型。但在實(shí)踐中,工件也可以是 WAR、EAR 或其他代碼捆綁類型。

    Maven 2 利用操作系統(tǒng)的目錄結(jié)構(gòu)對存儲在存儲庫中的工件集進(jìn)行快速索引。這個存儲庫索引系統(tǒng)依賴于這種能力來通過工件的坐標(biāo) 惟一標(biāo)識工件。

    Maven 坐標(biāo)

    Maven 坐標(biāo)是一組可以惟一標(biāo)識工件的三元組值。坐標(biāo)包含了下列三條信息:

    • 組 ID:代表制造該工件的實(shí)體或組織。例如,com.ibm.devworks 就是一個組 ID。

    • 工件 ID:實(shí)際的工件的名稱。例如,主體類名為 OpsImp 的項(xiàng)目也許會用 OpsImp 作為其工件 ID。

    • 版本:該工件的版本號。支持的格式為 mmm.nnn.bbb-qqqqqqq-dd ,其中, mmm 是主版本號, nnn 是次版本號, bbb 代表其 bug 修復(fù)水平。 qqqqq (限定詞)或 dd (構(gòu)建號)也能添加到版本號中,這兩項(xiàng)是可選項(xiàng)。

    對 Maven 坐標(biāo)的使用貫穿于 Maven 配置文件和 POM 文件中。例如,要在命名為 OpsImp 的模塊上指定項(xiàng)目依賴項(xiàng)(在 1.0-SNAPSHOT 級別),pom.xml 文件應(yīng)包含清單 1 所示的部分:



    清單 1. OpsImp 樣例模塊的 Maven 坐標(biāo)
    <dependencies>

    <dependency>
    <groupId>com.ibm.devworks</groupId>
    <artifactId>OpsImp</artifactId>
    <version>1.0-SNAPSHOT</version>

    </dependency>
    </dependencies>

    特別限定詞 SNAPSHOT 告訴 Maven 2:該項(xiàng)目或模塊還處于開發(fā)狀態(tài)中,它應(yīng)該獲取最新版的可用工件。

    要將該項(xiàng)目指定為依賴于 JUnit 進(jìn)行單元測試,可以將 JUnit 3.8.1 的坐標(biāo)作為一個依賴項(xiàng)添加到該項(xiàng)目的 pom.xml 文件中,如清單 2 所示:



    清單 2. JUnit 依賴項(xiàng)的 Maven 坐標(biāo)
    <dependencies>

    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>

    </dependency>
    </dependencies>





    回頁首


    深入 Maven 存儲庫

    由于 Maven 存儲庫是普通的目錄樹,所以可以很容易地看到工件是如何存儲到磁盤上的。圖 3 是本地存儲庫的一部分,顯示了 JUnit 3.8.1 工件的位置:



    圖 3. Maven 2 存儲庫內(nèi)幕

    從圖 3 中可以看出,Maven 維護(hù)了一個工件的 POM 文件,同時也為該工件和其存儲庫中的 POM 維護(hù)了檢驗(yàn)和散列。當(dāng)工件在存儲庫間轉(zhuǎn)移時,這些文件幫助確保工件的完整性。該工件已由 Maven 的依賴項(xiàng)管理引擎從中央存儲庫下載并放置到本地存儲庫中。

    在圖 4 中,坐標(biāo)為 com.ibm.devworks/OpsImp/1.0-SNAPSHOT 的工件顯示在本地存儲庫中。該工件和 POM 文件一起存放在存儲庫。在本例中,該工件在本地安裝。



    圖 4. 本地存儲庫中的 OpsImp 工件
    ?

    Maven 2 生命周期、階段、插件和 mojo

    Maven 通過插件動作完成大多數(shù)構(gòu)建任務(wù)。可以把 Maven 引擎認(rèn)為是插件動作的協(xié)調(diào)器。

    插件中的 Mojo

    插件是適應(yīng) Maven 的插件框架的軟件模塊。現(xiàn)在,可以使用 Java、Ant 或 Beanshell 來創(chuàng)建自定義插件。插件中的每個任務(wù)稱作一個 mojo。有時,插件也被視為一套相關(guān)的 mojo。創(chuàng)建自定義的 Maven 2 插件超出了本教程的范圍;參見 參考資料,以獲取更多信息。

    Maven 2 是預(yù)先打包好的,以便于下載,它和許多常用插件一起使用。大多數(shù)典型開發(fā)任務(wù)不需要使用額外插件。

    在開始編寫自己的插件前,您應(yīng)該先參考一下列出流行 Maven 2 插件的 Web 站點(diǎn)(參見 參考資料),看一下您需要的插件是不是已經(jīng)有了。圖 5 顯示了 Maven Plugin Matrix(參見 參考資料),它提供了許多可用插件的兼容性信息:



    圖 5. Maven Plugin Matrix





    回頁首


    將 mojo 綁定到生命周期各階段

    Maven 引擎在執(zhí)行構(gòu)建生命周期中相應(yīng)的階段時,執(zhí)行插件中的 mojo(構(gòu)建任務(wù))。插件的 mojo 和生命周期中的階段間的關(guān)聯(lián)叫做綁定 。插件開發(fā)人員能夠靈活地將一個或多個生命周期階段和一個插件關(guān)聯(lián)起來。





    回頁首


    默認(rèn)的生命周期的各階段

    Maven 對構(gòu)建生命周期的固定理解包含了許多不同的階段。表 1 簡短地描述了各個階段:



    表 1. Maven 2 默認(rèn)生命周期的各階段
    生命周期階段描述
    驗(yàn)證確保當(dāng)前配置和 POM 的內(nèi)容是有效的。這包含對 pom.xml 文件樹的驗(yàn)證。
    初始化在執(zhí)行構(gòu)建生命周期的主任務(wù)之前可以進(jìn)行初始化。
    生成源碼代碼生成器可以開始生成在以后階段中處理或編譯的源代碼。
    處理源碼提供解析、修改和轉(zhuǎn)換源碼。常規(guī)源碼和生成的源碼都可以在這里處理。
    生成資源可以生成非源碼資源。通常包括元數(shù)據(jù)文件和配置文件。
    處理資源處理非源碼資源。修改、轉(zhuǎn)換和重定位資源都能在這階段發(fā)生。
    編譯編譯源碼。編譯過的類被放到目標(biāo)目錄樹中。
    處理類處理類文件轉(zhuǎn)換和增強(qiáng)步驟。字節(jié)碼交織器和常用工具常在這一階段操作。
    生成測試源碼mojo 可以生成要操作的單元測試代碼。
    處理測試源碼在編譯前對測試源碼執(zhí)行任何必要的處理。在這一階段,可以修改、轉(zhuǎn)換或復(fù)制源代碼。
    生成測試資源允許生成與測試相關(guān)的(非源碼)資源。
    處理測試資源可以處理、轉(zhuǎn)換和重新定位與測試相關(guān)的資源。
    測試編譯編譯單元測試的源碼。
    測試運(yùn)行編譯過的單元測試并累計結(jié)果。
    打包將可執(zhí)行的二進(jìn)制文件打包到一個分布式歸檔文件中,如 JAR 或 WAR。
    前集成測試準(zhǔn)備集成測試。這種情況下的集成測試是指在一個受到一定控制的模擬的真實(shí)部署環(huán)境中測試代碼。這一步能將歸檔文件部署到一個服務(wù)器上執(zhí)行。
    集成測試執(zhí)行真正的集成測試。
    后集成測試解除集成測試準(zhǔn)備。這一步涉及測試環(huán)境重置或重新初始化。
    檢驗(yàn)檢驗(yàn)可部署歸檔的有效性和完整性。過了這個階段,將安裝該歸檔。
    安裝將該歸檔添加到本地 Maven 目錄。這一步讓其他可能依賴該歸檔的模塊可以使用它。
    部署將該歸檔添加到遠(yuǎn)程 Maven 目錄。這一步讓這個工件能為更多的人所用。

    Maven 從開源社區(qū)中汲取了十多年的項(xiàng)目構(gòu)建管理經(jīng)驗(yàn)。很難找到一個構(gòu)建周期不符合表 1 中的生命周期階段的軟件項(xiàng)目。

    啟動 Maven 2 引擎后,它會按順序經(jīng)歷表 1 中的各階段,執(zhí)行可能與該階段綁定的 mojo。每個 mojo 則可以使用 Maven 2 豐富的 POM 支持、依賴項(xiàng)管理,也可以訪問執(zhí)行這一專門任務(wù)時的構(gòu)建狀態(tài)信息。

    調(diào)用 Maven 2 引擎時,可以將一個生命周期階段指定為命令行參數(shù)。該引擎一直執(zhí)行到指定的階段(包括該指定的階段)。包含的階段中所有的 mojo 都會被觸發(fā)。

    簡短地說,這就是 Maven 2 的操作原理。在下一部分里,您將直接面對操作。對 Maven 操作、它的依賴項(xiàng)管理模型和它的 POM 有了基本的理解,您會發(fā)現(xiàn)實(shí)踐 Maven 2 是一項(xiàng)十分簡單的練習(xí)。

    下載和安裝 Maven 2

    根據(jù)下列步驟下載和安裝 Maven 2:

  • 從 Maven 項(xiàng)目的官方站點(diǎn)下載 Maven 2 二進(jìn)制文件(參見 參考資料)。
  • 將二進(jìn)制發(fā)布文件解壓到選定的目錄。
  • 將 InstallationDirectory/bin 目錄添加到 PATH 環(huán)境變量。
  • 為檢驗(yàn)安裝,鍵入 mvn -help 命令。您將看到清單 3 中的幫助頁面。



    清單 3. 使用 mvn -help 命令檢驗(yàn)安裝
    C:/>mvn -help

    usage: mvn [options] [<goal(s)>] [<phase(s)>]

    Options:

    -C,--strict-checksums Fail the build if checksums don't match

    -c,--lax-checksums Warn if checksums don't match

    -P,--activate-profiles Comma-delimited list of profiles to

    activate

    -ff,--fail-fast Stop at first failure in reactorized builds

    -fae,--fail-at-end Only fail the build afterwards; allow all

    non-impacted builds to continue

    -B,--batch-mode Run in non-interactive (batch) mode

    -fn,--fail-never NEVER fail the build, regardless of project

    result

    -up,--update-plugins Synonym for cpu

    -N,--non-recursive Do not recurse into sub-projects

    -npr,--no-plugin-registry Don't use ~/.m2/plugin-registry.xml for

    plugin versions

    -U,--update-snapshots Update all snapshots regardless of

    repository policies

    -cpu,--check-plugin-updates Force upToDate check for any relevant

    registered plugins

    -npu,--no-plugin-updates Suppress upToDate check for any relevant

    registered plugins

    -D,--define Define a system property

    -X,--debug Produce execution debug output

    -e,--errors Produce execution error messages

    -f,--file Force the use of an alternate POM file.

    -h,--help Display help information

    -o,--offline Work offline

    -r,--reactor Execute goals for project found in the

    reactor

    -s,--settings Alternate path for the user settings file

    -v,--version Display version information

    實(shí)踐 Maven 2:您的第一個 Maven 2 項(xiàng)目

    在第一個實(shí)踐的例子里,您將看到如何用最小的努力使用 Maven 2 構(gòu)建簡單項(xiàng)目。Maven 2 內(nèi)置的關(guān)于 Java 項(xiàng)目的知識消除了其他構(gòu)建工具也許必須要經(jīng)歷的冗長的配置過程。

    處理數(shù)值操作的類

    該例使用了一個處理數(shù)值操作的類。這個主體類的源代碼(叫做 NumOps)如清單 4 所示。



    清單 4.NumOps 類
    package com.ibm.devworks;

    import java.util.ArrayList;

    import java.util.Iterator;

    import java.util.List;

    public class NumOps {

    private List <Operation> ops = new ArrayList

    <Operation>();

    public NumOps() {

    ops.add( new AddOps());

    }

    public Operation getOp(int i)

    { Operation retval;

    if (i > ops.size())

    { retval = null;

    } else {

    retval = (Operation) ops.get(i);

    } return retval;

    }

    public int size() {

    return ops.size();

    }

    public static void main( String[] args ) {

    NumOps nop = new NumOps();

    for (int i=0; i < nop.size(); i++) {

    System.out.println( "2 " +

    nop.getOp(i).getDesc() +

    " 1 is " +

    nop.getOp(i).op(2,1) );

    }

    }

    }


    NumOps 類管理一個能夠在兩個整數(shù)上執(zhí)行數(shù)值操作的對象集。main 方法創(chuàng)建一個 NumOps 實(shí)例,然后調(diào)用由 NumOps 管理的每個對象,同時分別調(diào)用它的 getDesc() 方法和 op() 方法。由 NumOps 管理的所有對象都實(shí)現(xiàn)了在 Operation.java 中定義的 Operation 接口,接口代碼如清單 5 所示:



    清單 5. Operation 接口
    package com.ibm.devworks;

    public interface Operation {

    int op(int a, int b);

    String getDesc();

    }


    在這個初始的例子里定義的惟一操作是一個 AddOps 類,如清單 6 所示:



    清單 6. AddOps 類
    package com.ibm.devworks;

    public class AddOps implements Operation {

    public int op(int a, int b) {

    return a+b;

    }

    public String getDesc() {

    return "plus";

    }

    }

    執(zhí)行 NumOps 類時,會打印出下列輸出:

    2 plus 1 is 3






    回頁首


    使用 Archetype 來創(chuàng)建初始項(xiàng)目

    要創(chuàng)建能用 Maven 構(gòu)建的簡單 Java 項(xiàng)目所需的一切,可以使用 Archetype 插件,它是 Maven 2 中的標(biāo)準(zhǔn)插件。不同于構(gòu)建階段插件,Archetype 在 Maven 項(xiàng)目構(gòu)建生命周期之外運(yùn)行,用于創(chuàng)建 Maven 項(xiàng)目。在您想要包含 NumOps 項(xiàng)目的目錄中執(zhí)行下列命令(將所有命令敲在一行):

    mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes

    -DgroupId=com.ibm.devworks -DartifactId=NumOps


    該命令為 Archetype 插件提供您模塊的坐標(biāo):com.ibm.devworks/NumOps/1.0-SNAPSHOT。在此情況下,不需要指定版本,因?yàn)?Archetype 插件常默認(rèn)為 1.0-SNAPSHOT。此命令為項(xiàng)目創(chuàng)建了一個起始的 pom.xml 文件,也創(chuàng)建了規(guī)范的 Maven 2 目錄結(jié)構(gòu)。您將在本教程源代碼下載處的 example1 目錄下找到該代碼(參見 下載)。

    該輸出應(yīng)該與清單 7 類似:



    清單 7. 使用 Maven Archetype 創(chuàng)建 NumOps 項(xiàng)目
    [INFO] Scanning for projects...

    [INFO] Searching repository for plugin with prefix: 'archetype'.

    [INFO] -------------------------------------------------------------------------

    ---

    [INFO] Building Maven Default Project

    [INFO] task-segment: [archetype:create] (aggregator-style)

    [INFO] -------------------------------------------------------------------------

    ---

    [INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus

    ...

    [INFO] [archetype:create]

    [INFO] Defaulting package to group ID: com.ibm.devworks

    [INFO] -------------------------------------------------------------------------

    ---

    [INFO] Using following parameters for creating Archetype: maven-archetype-quicks

    tart:RELEASE

    [INFO] -------------------------------------------------------------------------

    ---

    [INFO] Parameter: groupId, Value: com.ibm.devworks

    [INFO] Parameter: packageName, Value: com.ibm.devworks

    [INFO] Parameter: basedir, Value: C:/temp/maven

    [INFO] Parameter: package, Value: com.ibm.devworks

    [INFO] Parameter: version, Value: 1.0-SNAPSHOT

    [INFO] Parameter: artifactId, Value: NumOps

    [INFO] ********************* End of debug info from resources from generated POM

    ***********************

    [INFO] Archetype created in dir: C:/temp/maven/NumOps

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESSFUL

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 1 second

    [INFO] Finished at: Sat Dec 02 22:04:02 EST 2006

    [INFO] Final Memory: 4M/8M

    [INFO] ------------------------------------------------------------------------


    Archetype 插件創(chuàng)建了一個目錄樹、一個 pom.xml 文件和一個占位符 App.java 應(yīng)用程序文件。它也為單元測試源碼創(chuàng)建了一棵目錄樹,還創(chuàng)建了一個占位符 AppTest.java 單元測試文件。這個項(xiàng)目已經(jīng)準(zhǔn)備就緒。圖 6 顯示了該 Archetype 插件創(chuàng)建的目錄和文件。



    圖 6. Archetype 生成的目錄和文件

    您只需將 NumOps.java、Operation.java 和 AddOps.java 文件移到 App.java 的位置,并移除 App.java。在下一部分中,將做出一些改變來定制生成的 pom.xm。

    定制 POM

    Maven 2 通過該 pom.xml 文件了解您的項(xiàng)目。該文件由 Archetype 按照 NumOps 生成,如清單 8 所示:



    清單 8. Archetype 生成的 POM - 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.org/POM/4.0.0

    http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ibm.devworks</groupId>

    <artifactId>NumOps</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>


    請注意:在測試階段中(通過 <scope> 標(biāo)記),Archetype 如何定義模塊的坐標(biāo)、如何將類型定義為 JAR 歸檔以及如何將 JUnit 指定為一個依賴項(xiàng)。要為您的新項(xiàng)目定制這個 pom.xml 文件,請參照清單 9 中突出顯示的部分,稍作改動。



    清單 9. 為 NumOps 項(xiàng)目定制生成的 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.org/POM/4.0.0

    http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ibm.devworks</groupId>

    <artifactId>NumOps</artifactId>

    <packaging>jar</packaging>

    <version>1.0-SNAPSHOT</version>

    <name>Intro to Maven 2 Example 1</name>
    <url>http://www.ibm.com/java</url>
    <build>
    <plugins>
    <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
    <source>1.5</source>
    <target>1.5</target>
    </configuration>
    </plugin>
    </plugins>
    </build>
    <dependencies>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
    </dependency>
    </dependencies>
    </project>

    額外的 <build> 標(biāo)記是必要的,用來覆蓋源代碼,以達(dá)到 Java 代碼的水平。默認(rèn)情況下,采用的是 JDK 1.4,但您的代碼使用了泛型,因而需要 JDK 5.0 編譯。

    編譯定制的項(xiàng)目

    現(xiàn)在可以使用 mvn compile 命令編譯 NumOps 項(xiàng)目。 這個命令使 Maven 2 引擎從構(gòu)建生命周期一直運(yùn)行到編譯階段,并執(zhí)行相應(yīng)的 mojo。您應(yīng)該看到構(gòu)建成功的報告,報告中在目標(biāo)目錄樹里創(chuàng)建了三個類文件(如清單 10 所示)。如果這是第一次運(yùn)行,那會花點(diǎn)時間,因?yàn)橐恍┮蕾図?xiàng)需要經(jīng)過 Internet 從中央存儲庫下載。



    清單 10. NumOps 項(xiàng)目中 mvn 編譯的輸出
    [INFO] Scanning for projects...

    [INFO] -------------------------------------------------------------------------

    ---

    [INFO] Building Intro to Maven 2 Example 1

    [INFO] task-segment: [compile]

    [INFO] -------------------------------------------------------------------------

    ---

    [INFO] [resources:resources]

    [INFO] Using default encoding to copy filtered resources.

    [INFO] [compiler:compile]

    Compiling 3 source files to C:/temp/maven/NumOps/target/classes

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESSFUL

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 1 second

    [INFO] Finished at: Sat Dec 02 22:52:16 EST 2006

    [INFO] Final Memory: 3M/7M

    [INFO] ------------------------------------------------------------------------






    回頁首


    添加單元測試

    項(xiàng)目開發(fā)的最佳實(shí)踐通常要求對所有代碼模塊進(jìn)行單元測試。Maven 2 為您創(chuàng)建了一個占位符 AppTest.java 單元測試文件。現(xiàn)在,將文件名改為 NumOpsTest.java,請參照清單 11 中突出顯示的部分,對生成的單元測試做出改動。也可以從源代碼下載處復(fù)制單元測試的源代碼(參見 下載)。



    清單 11. 為項(xiàng)目添加 NumOpsTest 單元測試
    package com.ibm.devworks;

    import junit.framework.Test;

    import junit.framework.TestCase;

    import junit.framework.TestSuite;

    /**

    * Unit test for simple App.

    */

    public class NumOpsTest

    extends TestCase

    {
    /**
    * Create the test case
    *
    * @param testName name of the test case
    */
    public NumOpsTest( String testName )

    {

    super( testName );

    }

    ...

    public void testNumOps()
    {
    NumOps nops = new NumOps();
    assertTrue( nops.size() == 1);
    assertTrue(
    nops.getOp(0).getDesc().equals("plus"));
    assertTrue( nops.getOp(0).op(2,1) == 3);

    }
    }

    現(xiàn)在可以使用 mvn test 命令運(yùn)行所有的 mojo 一直到測試階段。

    Maven 2 編譯源碼和單元測試。然后運(yùn)行測試,同時報告成功、失敗和錯誤的數(shù)目,如清單 12 所示:



    清單 12. 執(zhí)行 mvn 測試來編譯項(xiàng)目和運(yùn)行單元測試
    [INFO] Scanning for projects...

    [INFO] -------------------------------------------------------------------------

    ---

    [INFO] Building Intro to Maven 2 Example 1

    [INFO] task-segment: [test]

    [INFO] -------------------------------------------------------------------------

    ---

    [INFO] [resources:resources]

    [INFO] Using default encoding to copy filtered resources.

    [INFO] [compiler:compile]

    [INFO] Nothing to compile - all classes are up to date

    [INFO] [resources:testResources]

    [INFO] Using default encoding to copy filtered resources.

    [INFO] [compiler:testCompile]

    Compiling 1 source file to C:/temp/maven/NumOps/target/test-classes

    [INFO] [surefire:test]

    [INFO] Surefire report directory: C:/temp/maven/NumOps/target/surefire-reports

    -------------------------------------------------------

    T E S T S

    -------------------------------------------------------

    Running com.ibm.devworks.NumOpsTest

    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.031 sec

    Results :

    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESSFUL

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 2 seconds

    [INFO] Finished at: Sat Dec 02 23:04:27 EST 2006

    [INFO] Final Memory: 3M/6M

    [INFO] ------------------------------------------------------------------------

    實(shí)踐 Maven 2:參與多個項(xiàng)目構(gòu)建

    使用 Maven 2 構(gòu)建和測試簡單項(xiàng)目是很直接的。本部分用第二個例子來展示更現(xiàn)實(shí)也更為通用的多模塊項(xiàng)目。

    擴(kuò)展 NumOps 樣例

    NumOps 的例子將在此處的第二個例子里得到擴(kuò)展。添加一個新 SubOps 類來支持減法,添加一個新 MulOps 類來支持乘法。

    但 Operation 接口和 AddOps 類現(xiàn)在己從 NumOps 項(xiàng)目中移走。相反,它們和新的 SubOps 和 MulOps 類一起放到了一個叫做 OpsImp 的新項(xiàng)目中。圖 7 顯示了 NumOps 和 OpsImp 項(xiàng)目間的這種關(guān)系:



    圖 7. NumOps 和 OpsImp 間的關(guān)系

    在大型軟件開發(fā)項(xiàng)目中,子項(xiàng)目和子模塊之間常存在依賴性。您可以將這里的這項(xiàng)技術(shù)應(yīng)用到有著多個相互依賴項(xiàng)的任何多模塊 Maven 項(xiàng)目中。

    清單 13 里的 SubOps 在編碼上和 AddOps 類似。這里沒有顯示的 MulOps 也類似;您可以看一下隨附的代碼來了解詳情(參見 下載)。



    清單 13. 實(shí)現(xiàn) Operation 接口的新 SubOps 類
    package com.ibm.devworks;

    public class SubOps implements Operation {

    public int op(int a, int b) {

    return a-b;

    }

    public String getDesc() {

    return "minus";

    }

    }

    現(xiàn)在修改了 NumOps 的構(gòu)造函數(shù)來創(chuàng)建一個 SubOps 實(shí)例和一個 MulOps 實(shí)例。參見隨附的源代碼獲取詳情。





    回頁首


    創(chuàng)建主項(xiàng)目

    為和這兩個項(xiàng)目一起運(yùn)行,主項(xiàng)目創(chuàng)建在比 NumOps 和 OpsImp 的項(xiàng)目目錄高一級的目錄。NumOps 和 OpsImp 項(xiàng)目都使用標(biāo)準(zhǔn) Maven 項(xiàng)目目錄布局。在最頂部,項(xiàng)目目錄只包含一個 pom.xml 文件。圖 8 顯示了新的子目錄結(jié)構(gòu),緊跟在主目錄之下:



    圖 8. 多模塊項(xiàng)目的目錄結(jié)構(gòu)

    可以在分發(fā)代碼的 example2 子目錄中找到這個多模塊項(xiàng)目的代碼(參見 下載)。清單 14 顯示了頂層的 pom.xml 文件:



    清單 14. 多模塊項(xiàng)目頂層的 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.org/POM/4.0.0

    http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ibm.devworks</groupId>
    <artifactId>mavenex2</artifactId>
    <packaging>pom</packaging>

    <version>1.0-SNAPSHOT</version>
    <name>Maven Example 2</name>
    <url>http://maven.apache.org</url>
    <modules>

    <module>NumOps</module>

    <module>OpsImp</module>

    </modules>

    <build>
    <plugins>
    <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
    <source>1.5</source>
    <target>1.5</target>
    </configuration>
    </plugin>
    </plugins>
    </build>
    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>com.ibm.devworks</groupId>
    <artifactId>OpsImp</artifactId>
    <version>${project.version}</version>
    </dependency>
    </dependencies>
    </dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
    </dependency>
    </dependencies>
    </project>

    新代碼以粗體突出顯示。首先,這個主項(xiàng)目的工件 ID 是 mavenex2,其打包類型是 pom。這向 Maven 2 傳遞出這樣的信號:這是一個多模塊項(xiàng)目。

    隨后,<modules> 標(biāo)記指定組成此項(xiàng)目的兩個模塊:NumOps 和 OpsImp。

    這個主項(xiàng)目的子模塊能從這個 pom.xml 文件中繼承屬性。說得更具體一點(diǎn),這些子模塊都不需要將 JUnit 聲明為一個依賴項(xiàng),即使它們都包含單元測試。這是因?yàn)樗鼈兝^承了頂層定義的 JUnit 依賴項(xiàng)。

    <dependencyManagement> 標(biāo)記不指定此模塊依賴的依賴項(xiàng)。相反,它主要由子模塊使用。子模塊能指定 <dependencyManagement> 標(biāo)記中任何條目的依賴項(xiàng),而無需指定具體的版本號。當(dāng)項(xiàng)目樹更改依賴項(xiàng)的版本號時,這很有用,可以使需編輯的條目數(shù)目最小化。在本例中,OpsImp 項(xiàng)目的版本號是使用 ${project.version} 指定的。在執(zhí)行 Maven 時,這是一個會被相應(yīng)值所填充的參數(shù)。





    回頁首


    從主 POM 中繼承

    前進(jìn)到下一層的 OpsImp 目錄,可以找到該模塊的 pom.xml 文件,如清單 15 所示:



    清單 15. 新 OpsImp 項(xiàng)目的 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.org/POM/4.0.0

    http://maven.apache.org/maven-v4_0_0.xsd">

    <parent>

    <groupId>com.ibm.devworks</groupId>

    <artifactId>mavenex2</artifactId>

    <version>1.0-SNAPSHOT</version>

    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>OpsImp</artifactId>
    <packaging>jar</packaging>
    </project>

    <parent> 元素指定此模塊所繼承自的主 POM。從父模塊中繼承極大地簡化了這個 pom.xml。只需要覆蓋該工件 ID 并打包。此模塊繼承了其父模塊的依賴項(xiàng):JUnit 模塊。

    NumOps pom.xml 也從其父模塊中繼承,也相當(dāng)簡單。這個 pom.xml 顯示在清單 16 中:



    清單 16. NumOps 項(xiàng)目中顯示 POM 繼承關(guān)系的 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.org/POM/4.0.0

    http://maven.apache.org/maven-v4_0_0.xsd">

    <parent>

    <groupId>com.ibm.devworks</groupId>

    <artifactId>mavenex2</artifactId>

    <version>1.0-SNAPSHOT</version>

    </parent>

    <modelVersion>4.0.0</modelVersion>

    <artifactId>NumOps</artifactId>

    <packaging>jar</packaging>

    <dependencies>
    <dependency>
    <groupId>com.ibm.devworks</groupId>
    <artifactId>OpsImp</artifactId>
    </dependency>
    </dependencies>
    </project>

    發(fā)現(xiàn)有效的 POM
    只要從一個高層 POM 中繼承,您總能在了解了所有繼承元素后發(fā)現(xiàn)相對應(yīng)的 pom.xml 是什么樣。顯示 “effective POM” 的命令是 mvn help:effective-pom。您將看到一些您還沒有指定的元素。這些都是從 Super POM 中繼承的。每個項(xiàng)目 pom.xml 都從 Maven 內(nèi)嵌的 Super POM 中隱式地繼承。

    NumOps POM 中有意思的一處是將 OpsImp 項(xiàng)目指定為一個依賴項(xiàng)。請注意,在這個依賴項(xiàng)中沒有指定任何版本號。在它的父項(xiàng)目的 <dependencyManagement> 元素里已經(jīng)指定了首選的版本號。

    在項(xiàng)目頂層,現(xiàn)在可以用 mvn compile 命令編譯全部兩個模塊,或用 mvn test 命令為兩個模塊運(yùn)行單元測試。也可以運(yùn)行 mvn install 將打包的模塊安裝到本地目錄中。這使得任何依賴于它的模塊可以不訪問源代碼就能解析依賴項(xiàng)。





    回頁首

    在 Eclipse 3.2 中安裝 Maven 2.x Plug-in

    如果您在日常開發(fā)中使用 Eclipse IDE,那么您應(yīng)該在 Eclipse 中下載和安裝 Maven 2.x Plug-in。這個插件有助于在 Eclipse IDE 中操作 Maven 項(xiàng)目。參見 參考資料 獲取有關(guān)此插件的項(xiàng)目信息。

    可以使用 Eclipse 的軟件更新向?qū)г?Eclipse 下安裝 Maven 2.X Plug-in:

  • 從 Eclipse 的 Help 菜單中選擇 Software Updates>Find and Install...

  • 選擇 Search for new features to install,單擊 Next。您將看到更新站點(diǎn)向?qū)?#xff0c;如圖 9 所示:

    圖 9. Eclipse 更新站點(diǎn)向?qū)?/strong>

  • 單擊 New Remote Site 按鈕。

  • 在彈出的對話框中,輸入 Maven 2.x Plug-in for Eclipse 更新站點(diǎn),如圖 10 所示:

    圖 10. Eclipse 新的遠(yuǎn)程站點(diǎn)

  • 選擇要安裝的插件,讓安裝向?qū)е貑⒐ぷ骺臻g。重啟后,您就可以在 Eclipse 中使用 Maven Plug-in 的功能了。

  • 在 Eclipse 3.2 中使用 Maven 2 Plug-in

    本節(jié)涵蓋了 Eclipse 中 Maven 2.x Plug-in 的一些常用功能。

    在您的項(xiàng)目可以使用 Maven 2 插件功能前,需要在一個 Eclipse 項(xiàng)目中啟用 Maven 屬性。右鍵單擊您想要向其中添加 Maven 支持的項(xiàng)目,選擇 Maven2>Enable

    為確保項(xiàng)目的目錄結(jié)構(gòu)符合 Maven 的預(yù)期,您應(yīng)先創(chuàng)建 Maven 目錄結(jié)構(gòu)(或者手動或者使用 Archetype),然后將該項(xiàng)目添加到 Eclipse 中。

    在存儲庫中實(shí)時搜索依賴項(xiàng)

    使用插件將依賴項(xiàng)添加到 pom.xml 很簡單。右鍵單擊該項(xiàng)目的 pom.xml,然后選擇 Maven2>Add Dependency。這會啟動 Repository Search 向?qū)АfI入您要尋找的依賴項(xiàng)名稱開頭的一些字母,該向?qū)谥醒氪鎯熘兴阉魅魏蜗嗥ヅ涞墓ぜO嗥ヅ涞墓ぜ乃性斍槎紩尸F(xiàn)給您,以幫助您選擇依賴項(xiàng)。圖 11 顯示了搜索 JUnit 工件的結(jié)果:



    圖 11. Maven Repository Search 向?qū)?/strong>

    一旦選定了想要的工件的版本,單擊 OK,插件就會自動地將一個新的 <dependency> 元素添加到 pom.xml 中。





    回頁首


    調(diào)用 Maven 構(gòu)建

    一個構(gòu)建涉及到能從 Eclipse 中啟動的生命周期的任何階段。首先,確保啟用了 Maven 的項(xiàng)目當(dāng)前是打開的。然后,從 Eclipse 菜單中選擇 Run>External Tools>External Tools...。這將顯示 External Tools 向?qū)?#xff0c;如圖 12 所示:



    圖 12.使用 Eclipse External Tool 向?qū)ㄟ^ Maven 構(gòu)建

    給這個配置文件起名,然后通過單擊 Goals... 按鈕選擇一個生命周期階段。單擊 Run 運(yùn)行 Maven。

    Maven 輸出顯示在 Eclipse 的 Console 選項(xiàng)卡中。

    結(jié)束語

    在本教程中,您:

    • 探究了 Maven 2 設(shè)計背后的模型和動機(jī)
    • 理解了所有重要的 Maven POM
    • 觀察了 Maven 存儲庫和坐標(biāo)系統(tǒng)是如何簡化復(fù)雜依賴項(xiàng)管理的
    • 在快捷簡單的項(xiàng)目中使用了 Maven 2
    • 了解了 Maven 2 如何有助于大型多模塊項(xiàng)目
    • 實(shí)際體驗(yàn)了 Maven 2 Eclipse Plug-in
    • 直接觀察了 Maven 2 如何便利您的日常項(xiàng)目構(gòu)建和源碼/二進(jìn)制管理活動

    隨著軟件開發(fā)協(xié)作的發(fā)展,Maven 也會不斷發(fā)展和改變來適應(yīng)這種需求。作為大多數(shù)大型開源項(xiàng)目的骨干構(gòu)建工具,它一定能從開發(fā)者社區(qū)不斷提供的改進(jìn)意見中獲益。

    一旦理解了 Maven 2 的動機(jī)和它想要戰(zhàn)勝的挑戰(zhàn),了解 Maven 2 就不困難了。作為構(gòu)建工具,Maven 2 高效可用,即使是一個十足的新手在一個與世隔絕的地方開發(fā)項(xiàng)目,他也會深感 Maven 2 的這一特性。開始在您自己的開發(fā)項(xiàng)目中使用 Maven 2 并參加一個開源開發(fā)社區(qū)吧,很快,您也將能夠?qū)?Maven 2 的發(fā)展方向和進(jìn)程有所影響。

    下載

    描述名字大小下載方法本教程的樣例代碼
    j-mavenv2.zip34.1KBHTTP

    參考資料

    學(xué)習(xí)
    • Maven 項(xiàng)目的 Web 站點(diǎn):獲取有關(guān) Maven 2 的最新詳情,包括設(shè)置參考和如何創(chuàng)建自定義插件的細(xì)節(jié)。

    • Maven Plugin Matrix:查閱這份參考資料,獲取有關(guān)插件兼容性的信息。

    • Better Builds with Maven :由 Maven 2 開源項(xiàng)目的創(chuàng)建者和主要參與者編寫的一本關(guān)于 Maven 2 的出色而全面的書。

    • Java 技術(shù)專區(qū):數(shù)百篇關(guān)于 Java 編程各方面的文章。

    • 瀏覽 技術(shù)書店 中關(guān)于這些技術(shù)主題和其他技術(shù)主題的書籍。


    獲得產(chǎn)品和技術(shù)
    • Apache Maven 2:從該項(xiàng)目的站點(diǎn)下載 Maven 2。

    • Eclipse:下載 Eclipse SDK。

    • Maven 2.x Plug-in for Eclipse :下載最新版的插件。

    • Codehaus Mojo 項(xiàng)目 和 Apache Maven 插件列表:還需要更多的 Maven mojo 嗎?這些站點(diǎn)上有可用的 Maven 插件的完整目錄。

    關(guān)于作者

    Sing Li 是一位顧問和多產(chǎn)的作家,具有二十多年的行業(yè)工作經(jīng)驗(yàn)。他編寫了 Professional Apache Geronimo、Beginning JavaServer Pages、Professional Apache Tomcat 5、Pro JSP - Third Edition、Early Adopter JXTA、Professional Jini、Beginning J2ME: From Novice to Professional, Third Edition、Professional Apache Geronimo 和許多其他書籍。Sing 也為技術(shù)雜志供稿,還參加開源社區(qū)。他是開源、VOIP 和 P2P 運(yùn)動的積極倡導(dǎo)者。可以通過 westmakaha@yahoo.com 和 Sing 聯(lián)系。



    轉(zhuǎn)自:IBM開發(fā)者社區(qū)

    轉(zhuǎn)載于:https://www.cnblogs.com/lanzhi/archive/2008/09/11/6470063.html

    《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的Apache Maven 2 简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 一久久久久 | 中国白嫩丰满人妻videos | 亚洲无限码 | 一区二区三区 中文字幕 | 国产交换配乱淫视频免费 | 日日摸夜夜 | 日日麻批| 久久夜靖品2区 | 中文字幕视频 | 伊人久久免费 | 国产1区2区3区 | 自拍偷拍另类 | 国产视色 | 爱草在线视频 | 亚洲黄色在线播放 | 久久精品性爱视频 | 欧美成人hd | 性久久久久久久久久久久 | 911av| 美女被男生免费视频 | 一二三四区视频 | 影音先锋国产精品 | 嫩草视频在线观看 | 国产三级久久久久 | 91黑人精品一区二区三区 | 黄色av成人 | 亚洲高清视频在线 | 亚洲激情图| 夜夜操天天射 | 在线观看日韩av | 国产一区二区av在线 | 黄色大全在线观看 | 国产精品国产av | 成人a毛片久久免费播放 | 免费网站在线观看人数在哪动漫 | 精品久久亚洲 | 四虎影院新网址 | 日本午夜一区二区 | 免费毛片视频 | 日本高清免费视频 | 三区在线视频 | 日本成人在线一区 | 黄色三级视频网站 | av大西瓜| 免费观看av | 91大神在线看 | 国产无套内射又大又猛又粗又爽 | 美日韩一区二区 | 奇米激情| 国产亚洲av片在线观看18女人 | 同性色老头性xxxx老头 | 又黄又爽又色视频 | 久久久久久久久久一区 | 欧美日韩综合一区二区 | 好吊视频一二三区 | 亚洲精品资源在线 | 校园sm主奴调教1v1罚视频 | 成人在线免费电影 | 亚洲午夜激情视频 | 日本网站黄色 | 欧美 日韩 国产 在线 | 青青草亚洲 | 尤物av在线| 欧美顶级毛片在线播放 | 97视频免费观看 | 婷婷六月天在线 | 污污污污污污www网站免费 | 国产精品久久久久久久 | 欧美亚洲一区二区三区四区 | 日本三区在线 | 免费久久av | 天堂网avav| 884aa四虎影成人精品一区 | 欧美成人精品在线 | 亚洲欧洲一级 | 午夜福利视频合集1000 | 久久精品丝袜高跟鞋 | 色www国产亚洲阿娇 自拍一区在线 | 日本色中色 | 中文字幕在线观看一区二区三区 | 欧美不卡视频在线观看 | 成为性瘾网黄的yy对象后 | 天天看黄色 | 欧美精品久久久久a | 欧美激情成人网 | 精产国品一二三产品蜜桃 | 久久久精品动漫 | 一区二区三区精品国产 | 久久久精品国产sm调教网站 | av观看一区| 日韩大片在线免费观看 | 激情视频网站在线观看 | 国产美女菊爆在线播放APP | 久久中文字幕一区 | 成人av在线看 | 欧美青青草 | 国产偷拍一区二区三区 | 麻豆乱淫一区二区三区 | 欧美少妇色图 |