Maven@ITIL

 

 

 

 

Maven@ITIL

 

 

 

 

 

 

 

 

liuzhankun@oped

2010-10-17


 

1 基本概念

1.1 Maven是什麼

         Maven是一個項目管理工具,包含一個項目對象模型,一組標準集合,一個項目生命週期,一個依賴管理系統,和一些插件。(別被這個概念嚇跑了,我們用Maven多用在依賴管理、構建和發佈項目)。

 

1.2 約定優於配置

         系統、框架應該設定合理的默認值,而非要求提供不必要的配置。比如源代碼、資源文件的存放路徑等。優點:使用通用的一組約定,簡化配置;提供了構建軟件的一般性接口,用戶能很容易的對一個陌生項目進行構建。缺點:用戶有一種被強迫的感覺。

1.3 概念模型

         項目概念模型包含如下特徵:

1.         依賴管理
項目是由一個包含組標識符(groupId)、構件標識符(artifactId)、版本(version)的唯一的座標定義的。項目間可以使用這些座標來聲明依賴。

2.         遠程倉庫
和項目依賴相關的,我們可以使用定義在項目對象模型(POM)中的座標來創建Maven構件的倉庫。

3.         全局性構件邏輯的重用
插件的使用和配置和項目對象模型(POM=Project Object Model)一起工作,沒有被設計成需要單獨的配置文件。

4.         工具可移植性
EclipseNetBeansInteliJ等開發工具都有一個共同的地方來找到項目信息。

5.         便於查找個過濾構件
Nexus這樣的工具允許你是用存儲在POM中的信息對倉庫中的內容進行索引和搜索。

 

1.4 MavenAnt的區別

         Ant是是一個被廣泛使用的構建工具,現在還有很多人在Maven的構建中使用Ant構建腳本。但Maven不僅僅是一個工具,而是一個平臺。Maven的核心財產時聲明性構建、依賴管理、倉庫管理、基於插件的高度和重用。

在構建這個層面,Ant的特點:

1.       Ant沒有約定一個項目的目錄結構,你必須告訴Ant去哪裏找源代碼、哪裏放置輸出。

2.       Ant是程序化的(基於XML進行編程),你必須明確的告訴Ant做什麼、什麼時候做(比如:先編譯,然後複製,然後壓縮)。

3.       Ant沒有生命週期,你必須手動爲每個目標附上一個任務序列。

Maven的特點

1.       Maven擁有約定,他知道你的源代碼在哪裏,也知道編譯後的字節碼放到哪裏(target/classes)。

2.       Maven是聲明式的,只需要創建一個pom.xml文件,然後向源代碼放到默認目錄,Maven會自動幫你做其他事。

3.         Maven有一個聲明週期,當你執行Maven install的時候,Maven會自動執行一系列有序的步驟,直到達到你指定的目標。

1.5 SnapshotRelease的區別

         Maven的依賴管理是基於版本管理的,對於發佈狀態的構件,如果版本號相同,即使我們內部的鏡像服務器上的組件比本地新,Maven也不會主動下載的。如果我們在開發階段都是基於正式發佈版本來做依賴管理,那麼遇到這個問題,就需要升級組件的版本號,可這樣就明顯不符合要求和實際情況了。但是,如果是基於快照版本,那麼問題就自熱而然的解決了,而Maven已經爲我們準備好了這一切。

         我們在開發階段,可以將公用庫的版本設置爲快照版本,而被依賴組件則引用快照版本進行開發,在公用庫的快照版本更新後,我們也不需要修改pom文件提示版本號來下載新的版本,直接mvn執行相關編譯、打包命令即可重新下載最新的快照庫了,從而也方便了我們進行開發。

         比如開發狀態的版本定義爲Snapshot,如:1.0.0-SNAPSHOT,待版本穩定後,爲這個項目打一個tag,這個tag的版本修改爲Release1.0.0,然後發佈到本地倉庫,同時將原來trunk下面的項目版本升一個,如:1.0.1-SNAPSHOT

 

2 Maven的安裝

         Windows下,先到http://maven.apache.org/download.html下載個最新的字節碼zip文件,保存到本地後解壓縮,然後將Mavenbin目錄追加到環境變量PATH中,只要在命令行下輸入:mvn -v,能正確輸出Maven的版本號,則表明安裝成功。

         Mavenconf/目錄下包含一個全局的settings.xml文件,該文件用於自定義你機器上的Maven的一些行爲。如果你需要自定義Maven,通常做法是複寫~/.m2目錄下的settings.xml~表示用戶目錄,Windows下這個目錄在系統盤下的用戶目錄)。

         ~/.m2/repository,該目錄是你本地的倉庫,當你從遠程Maven倉庫中下載依賴的時候,會在本地倉庫存儲這個依賴的一個副本。這個目錄可以在settings.xml中修改。

3 Eclipse插件

         Eclipse中使用Maven插件能方便的創建和管理Maven項目。Maven插件的安裝和其他插件的安裝過程是一樣的。

         點擊菜單:Help à Software Updates à Find and Install…,然後選擇“Search for new features to install 如下圖所示。

 

         點擊“New Remote Site…”,彈出的對話框中輸入站點名稱和URL,如NamemavenURLhttp://m2eclipse.sonatype.org/sites/xxxx(請在瀏覽器中打開http://m2eclipse.sonatype.org/sites,選擇一個VERSION進行下載),然後點擊“OK”,Eclipse會自動進行插件的下載和安裝,如下圖所示。

 

         安裝完後重新啓動Eclipse後就能使用Maven插件了。如果安裝成功,在Window->Preferences就能看到,如下圖:

4 創建項目

         通過EclipseMaven插件可以很容易的完成Maven項目的創建,下面將以創建itil-problem-core項目爲例。

         點擊菜單File->New->Other,然後選擇Maven Project,然後點擊“Next”,然後選擇存儲路徑。如下圖所示。

 

         在“Select an Archetype”選擇默認的默認的設置就可以了,即爲“maven-archetype-quickstart”,如果創建的是web項目,則可以選擇“maven-archetype-webapp”。

         然後點擊“Next”。然後輸入Group Id(如:com.baidu.noah.itilArtifact ID(如:itil-problem-core)和Version(如:1.0.0)等信息,Package信息可以隨意填寫,他會爲你創建一個默認的包。點擊確認就完成了Maven項目的創建。如下圖:

 

編輯pom.xml,將當前項目的Parent Project指定爲Noah-Itil,需要在<project>節點下添加如下內容:

    <parent>

       <artifactId>itil</artifactId>

       <groupId>com.baidu.noah.itil</groupId>

       <version>1.0.0</version>

    </parent>

 

5 項目的提交

         通過EclipseSVN插件可以將創建的項目提交到SVN服務器上。

         首選,選中項目,點擊鼠標右鍵,選擇:Team à Share Project…,如下圖所示。

然後選擇資源庫類型爲SVN,點擊“Next”。

如果有對應的資源庫路徑則選擇相應的一個,否則新創建一個。如果新創建,輸入的URL可爲:https://svn.baidu.com/op/oped/noah/trunk/itil/,請勿輸入包括項目名稱的路徑,因爲後面的步驟會把項目名稱作爲路徑追加到URL中。如下圖所示。

然後點擊“Next”選擇項目存儲的最終路徑,也可以重新調整路徑。點擊“Next”輸入提交的註釋信息,然後點擊“Finish”完成項目的提交,如下圖所示。

 

在項目提交時,有些項目的配置文件請勿提交到svn,因爲這些配置信息只和你本機的IDE相關。請勿提交的內容有:

1.         .classpath 文件

2.         .project 文件

3.         .settings 目錄

4.         target 目錄

 

6 項目的導出

         如果SVN中已經有了一個Maven項目,我們需要從SVN中把它導出爲本地的Maven項目。步驟如下。

         點擊菜單:File à New à Other,選擇“Checkout Maven Project from SCM”。在SCM路徑上選擇svnURL中輸入項目的地址,如:https://svn.baidu.com/op/oped/noah/trunk/itil/itil-problem-core/,點擊“Finish”完成項目的導出。如下圖所示。

7 倉庫管理器

7.1 本地倉庫的優點

         Maven是有一箇中央資源庫(http://repo1.maven.org/maven2/),我們常用的資源基本上都涵蓋了,索引文件有70M+。但還是建議各個企業建立自己的資源考慮,主要是基於下面幾個原因:

1.         加速構建

可是直接使用本地倉庫緩存的資源,不需要浪費時間向中央倉庫請求。

2.         節省你的寬帶
本地倉庫可以緩存你常用的資源,不需要每次都向中央倉庫請求下載所需的資源。

3.         節省中央Maven倉庫的帶寬
一種公德心,利己利人。

4.         可預見性和穩定性
網絡環境相對獨立,不會因爲到中央倉庫的網絡連接問題影響你的構建。

5.         控制和審計
可以控制和監管開發團隊中使用的依賴。

6.         能夠部署第三方構件
可以把在公共Maven倉庫中獲取不到的第三方提供的構件部署到自己的倉庫中,這樣你的企業內部就能使用這些構件。

7.         可以建立內部倉庫
這樣將企業內部可公用的組件發佈到內部倉庫中,這樣其他團隊或項目中就能很簡單的使用這些構件。

 

基於上面的原因,我們使用了Sonatype Nexus搭建了內部的Maven倉庫。

7.2 如何使用本地倉庫

         我的資源的依賴如何才能通過內部倉庫進行查找和下載,而不是Maven中央倉庫呢?如果你的Maven項目已經指定了他的Parent項目是itil的話,他已經繼承了itil中配置的內部倉庫的信息。

<repositories>

  <repository>

  <id>Nexus</id>

  <name>Nexus Public Repository</name>                <url>http://tc-test-aos02.tc.baidu.com:8081/nexus/content/groups/public</url>

  </repository>

</repositories>

 

7.3 發佈自己的構件

         上面提到了,本地倉庫的一個重要的優點就是能發佈自己的構件,方便部門和項目間構件的共享,那如何才能發佈自己的構件到本地倉庫上呢?這些配置信息同樣已經定義在itil項目中了(pom.xml):

<distributionManagement>

<repository>

<id>nexus-releases</id>

<name>Nexus Release Repository</name>            <url>http://tc-test-aos02.tc.baidu.com:8081/nexus/content/repositories/releases</url>

</repository>

 

<snapshotRepository>

<id>nexus-snapshots</id>

<name>Nexus Snapshot Repository</name>            <url>http://tc-test-aos02.tc.baidu.com:8081/nexus/content/repositories/snapshots</url>

<uniqueVersion>false</uniqueVersion>

</snapshotRepository>

</distributionManagement>

         這裏面定義了releasesnapshot版本的資源發佈路徑。這個項目只要指定parent項目是itil就能直接繼承這些配置信息。

         同時,我們內部倉庫的構件發佈是有權限控制的,需要指定發佈者的用戶名和密碼,這時候需要修改settings.xml配置文件,我們設定的Sonatype Nexus發佈者用戶名密碼是deployment/deployment!@#

<server>

<id>nexus-releases</id>

<username>deployment</username>

<password>deployment!@#</password>

</server>

 

<server>

<id>nexus-snapshots</id>

<username>deployment</username>

發佈了83 篇原創文章 · 獲贊 3 · 訪問量 5123
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章