Maven 是 Apache 的一個頂級的項目:http://maven.apache.org/
Maven項目對象模型(POM),可以通過一小段描述信息來管理項目的構建,報告和文檔的項目管理工具軟件。
Maven 除了以程序構建能力為特色之外,還提供高級項目管理工具。由于 Maven 的缺省構建規則有較高的可重用性,所以常常用兩三行 Maven 構建腳本就可以構建簡單的項目。由于 Maven 的面向項目的方法,許多 Apache Jakarta 項目發文時使用 Maven,而且公司項目采用 Maven 的比例在持續增長。
Maven這個單詞來自于意第緒語(猶太語),意為知識的積累,最初在Jakata Turbine項目中用來簡化構建過程。當時有一些項目(有各自Ant build文件),僅有細微的差別,而JAR文件都由CVS來維護。于是希望有一種標準化的方式構建項目,一個清晰的方式定義項目的組成,一個容易的方式發布項目的信息,以及一種簡單的方式在多個項目中共享JARs。
Maven最初設計,是以簡化Jakarta Turbine項目的建設。在幾個項目,每個項目包含了不同的Ant構建文件。 JAR檢查到CVS。
Apache組織開發Maven可以建立多個項目,發布項目信息,項目部署,在幾個項目中JAR文件提供團隊合作和幫助。
Maven主要目標是提供給開發人員:
? 項目是可重復使用,易維護,更容易理解的一個綜合模型。
? 插件或交互的工具,這種聲明性的模式。
Maven項目的結構和內容在一個XML文件中聲明,pom.xml 項目對象模型(POM),這是整個Maven系統的基本單元。
那么,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文件,等等。
⒈ 項目構建
什么是構建工具?
構建工具是將軟件項目構建相關的過程自動化的工具。構建一個軟件項目通常包含以下一個或多個過程:
生成源碼(如果項目使用自動生成源碼);
① 從源碼生成項目文檔;
② 編譯源碼;
③ 將編譯后的代碼打包成 JAR 文件或者 ZIP 文件;
④ 將打包好的代碼安裝到服務器、倉庫或者其它的地方;
有些項目可能需要更多的過程才能完成構建,這些過程一般也可以整合到構建工具中,因此它們也可以實現自動化。
自動化構建過程的好處是將手動構建過程中犯錯的風險降到最低。而且,自動構建工具通常要比手動執行同樣的構建過程要快。
⒉ 文檔管理
⒊ 生成測試報告
⒋ 解決項目間依賴項
⒌ 源代碼版本管理及自動關聯
⒍ 項目 Releases
⒎ 輔助測試
⒏ jar 包自動下載
⒐ 強制性精確的 jar 包管理
⒑ 項目的分發