Apache Maven 是一個軟件項目管理和理解工具.它基於POM(project object model,項目對象模型),它能夠從一箇中央信息來管理項目的構建,報告和文檔.html
Introduction:web
Maven,在猶太語中的意思是知識倉庫,最初開始是爲了簡化Jakarta Turbine項目的構建過程.有一些被CVS管理的並擁有各自有些微差別的Ant構建文件和JAR的項目.咱們想要有個標準的項目構建方法,清晰的項目組成定義,簡單的項目信息發佈方式以及共享JAR包的途徑.apache
結果是一個咱們能夠用來構建和管理JAVA項目的工具.咱們但願它可使JAVA開發人員的平常工做更加簡單,而且爲任何JAVA項目的理解提供廣泛性的幫助.閉包
Maven的主要目標是容許開發人員在最短的時間內理解開發工做的完整狀態.爲了達到這一目標,這裏有一些使人擔憂的問題須要處理:框架
1.簡化構建過程maven
2.提供一個統一的構建系統編輯器
3.提供優質的項目信息ide
4.提供最優部署實踐的指導方案工具
5.容許透明的遷移到新特性post
你可能據說過關於Maven的下面一些內容:
1.它是站點和文檔工具
2.它擴展Ant並讓你下載依賴
3.它是可複用Ant腳本的集合
儘管Maven作這些事,可是這些並非Maven僅有的特性,並且這些和Maven的主旨有很大的不一樣.
咱們應當瞭解到有些項目可能由於其歷史緣由沒辦法符合要求.儘管Maven自己的設計足夠靈活,可是在這些狀況下針對不一樣項目的不一樣須要,它仍然無法迎合除非可以作些折中的處理.
若是你決定使用Maven,而且有着不能重組的不一樣尋常的構建結構,你可能不得不放棄它的一些功能或者徹底放棄使用Maven
Feature:
1.經過最佳的實踐來簡單的安裝項目-用幾秒鐘的時間建立一個項目
2.在全部項目中使用一致的方式,意味着不須要加大開發人員進入項目的時間
3.出衆的依賴管理包括自動更新,依賴閉包(也叫做依賴傳遞)
4.能夠輕易地同時處理多個項目
5.一個龐大且不斷成長的倉庫,儲存了大量開源項目實時可用的最新版本的框架庫.
6.可擴展的,能夠輕鬆編寫JAVA或腳本語言的插件
7.只須要少許配置就能夠即時訪問新特性
8.在Maven外部爲依賴管理和部署提供Ant任務
9.基於模型的構建:在大多數狀況下,Maven有能力構建任意多的項目到預約義的輸出類型如:JAR,WAR,或基於項目元數據的分佈,而不須要任何腳本
10.項目信息的相關站點:在構建過程當中使用相同的元數據,Maven能夠生成一個包含任何你添加的文檔信息的Web站點或者PDF,並將項目的開發狀態添加到標準報告中
11.發佈管理和分發出版:不須要太多額外的配置,Maven將集成你的代碼控制系統(如:CVS)而且基於一個標籤來管理項目的發佈.它也能夠發佈項目到分佈位置以供其餘項目使用.Maven有能力發佈一個獨立的輸出如:一個JAR,一個包含其餘依賴和文檔的存檔或者做爲一個分佈源
12.依賴管理:Maven鼓勵中央庫的JAR和其餘的依賴.Maven伴隨着一個機制:項目客戶端能夠經過從一箇中央庫下載所需的JAR來構建你的項目.這容許了Maven用戶來重用項目之間的JAR而且鼓勵了項目之間的溝通來確保向下兼容問題處理
給出原文:
1.Simple project setup that follows best practices - get a new project or module started in seconds
2.Consistent usage across all projects means no ramp up time for new developers coming onto a project
3.Superior dependency management including automatic updating, dependency closures (also known as transitive dependencies)
4.Able to easily work with multiple projects at the same time
5.A large and growing repository of libraries and metadata to use out of the box, and arrangements in place with the largest Open Source projects for real-time availability of their latest releases
6.Extensible, with the ability to easily write plugins in Java or scripting languages
7.Instant access to new features with little or no extra configuration
8.Ant tasks for dependency management and deployment outside of Maven
9.Model based builds: Maven is able to build any number of projects into predefined output types such as a JAR, WAR, or distribution based on metadata about the project, without the need to do any scripting in most cases.
10.Coherent site of project information: Using the same metadata as for the build process, Maven is able to generate a web site or PDF including any documentation you care to add, and adds to that standard reports about the state of development of the project. Examples of this information can be seen at the bottom of the left-hand navigation of this site under the "Project Information" and "Project Reports" submenus.
11.Release management and distribution publication: Without much additional configuration, Maven will integrate with your source control system such as CVS and manage the release of a project based on a certain tag. It can also publish this to a distribution location for use by other projects. Maven is able to publish individual outputs such as a JAR, an archive including other dependencies and documentation, or as a source distribution.
12.Dependency management: Maven encourages the use of a central repository of JARs and other dependencies. Maven comes with a mechanism that your project's clients can use to download any JARs required for building your project from a central JAR repository much like Perl's CPAN. This allows users of Maven to reuse JARs across projects and encourages communication between projects to ensure that backward compatibility issues are dealt with.
FAQ:http://maven.apache.org/general.html
Download:https://maven.apache.org/download.cgi
Install:
1.確保已經搭建了可運行的JAVA環境
2.解壓下載包
3.配置Maven環境變量(PATH添加MAVEN_HOME\bin)
4.運行命令mvn -v來檢測安裝是否成功
Configure:
Maven自身使用和構建項目使用的配置分佈在如下幾個地方
1.MAVEN_OPTS 環境變量:這個變量包含了用來啓動JVM運行Maven的參數和能夠額外添加給Maven的全局選項.
2.setting.xml 文件:位於USER_HOME/.m2目錄下的這個配置文件用來包含供Maven在全部項目中使用的通用配置.
3..mvn 文件夾:位於項目的頂層文件夾,maven.config和extensions.xml包含了項目指定的用來運行Maven的配置.
Run:
Maven的運行語法:mvn [options] [<goal(s)>] [<phase(s)>]
使用mvn -h來獲取全部可用的選項
使用Maven生命週期階段來構建項目的一個典型調用:mvn package
生命週期的構建以及各個階段:
1.clean:pre-clean, clean, post-clean
2.default:validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test,integration-test, post-integration-test, verify, install, deploy
3.site:pre-site, site, post-site, site-deploy
從新構建一個項目生成全部打包輸出和文檔站點並部署到倉庫管理器能夠經過下面的命令執行:
mvn clean deploy site-deploy
僅僅建立包並安裝到本地倉庫以供其餘項目能夠來複用,執行以下命令:
mvn clean install(這也是maven項目中最經常使用的構建方式)
當並非和一個項目一塊兒工做,在其餘的一些用例中,你可能只是想要調用一個指定的任務(所謂的目標插件),以下執行:
mvn archetype:generate || mvn checkstyle:check
IDE Integration:
全部的JAVA平臺的流行開發環境都支持對Maven衆多開箱即用的特性,下面按字母排序給出一些流行IDE:
1.Eclipse IDE - M2Eclipse(它是官方正式的Eclipse項目,用來將Maven整合進Eclipse)
特性以下:
在Eclipse中啓動Maven構建
基於pom.xml的依賴關係管理
從Eclipse工做空間解決Maven依賴而不須要安裝到本地Maven倉庫
自動從遠程Maven倉庫下載依賴
爲新建Maven項目,pom.xml提供嚮導,而且爲現有的項目提供可Maven化支持
在遠程Maven倉庫快速搜索依賴
在Java編輯器中經過使用類名或包名查找依賴Jar來快速修復
和其餘Eclipse工具整合,如:WTP,AJDT,Mylyn,Subclipse等
2.JetBrains IntelliJ IDEA(略)
3.Netbeans IDE(略)