Maven是一個跨平臺的項目管理工具,主要服務於Java
平臺的項目構建、依賴管理和項目信息管理。java
Maven的用途之一是項目構建,可以自動化構建過程,從清理、編譯、測試到生成報告,再到打包和部署,只須要輸入簡單命令便可(如mvn clean install
)。web
Maven不只是構建工具,仍是依賴管理工具和項目信息管理工具,經過提供中央倉庫,自動幫咱們下載構件(artifact
)。apache
Remark:
Maven
依賴於JDK
,安裝Maven以前須要先安裝JDK
。Maven
能夠運行在JDK1.4
及以上版本。app
Maven項目的核心是pom.xml
,POM
(Project Object Model
)項目對象模型,定義項目基本信息,描述項目如何構建,聲明項目依賴等。webapp
簡單的pom.xml以下:maven
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.wangdh.maven</groupId> <artifactId>maven-demo</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>jar</packaging> </project>
project
是全部pom.xml
的根目錄;工具
modelVersion
指定當前POM
模型的版本,對Maven 2
及Maven 3
而言,該值只能是4.0.0。測試
groupId、artifactId、version
定義了一個項目的基本座標。ui
packaging
能夠爲jar
(默認)、pom
、war
,是基於基本座標進行區分的。插件
在Maven
中,使用了約定大於配置的原則,能夠大量減小配置。默認的約定有:
1) 源碼路徑 src/main/java
2) 編譯輸出目錄 target/classes
3) 打包方式jar
4) 包輸出目錄target
5) 在項目的根目錄放置pom.xml
在Maven
中,約定的項是可以經過配置項修改的,約定的項也是配置在超級POM
中,能夠在當前的POM
文件,經過修改對應配置進行覆蓋。
基於約定大於配置的思想,Maven
可使用Archetype
快速的生成項目骨架,在Maven 3
中,簡單運行:mvn archetype:generate
。
Archetype
能夠簡單理解成項目模塊。Archetype
不是Maven
的核心特性,主要是經過maven-archetype-plugin
插件來實現的。
經常使用的Archetype有:
maven-archetype-quickstart
maven-archetype-webapp
groupId
定義項目的組,通常爲公司的反向域名+項目的名稱,如:com.xxx.myApp
。
artifactId
定義了當前項目在組中的惟一id
,通常以項目名稱爲前綴,如:myApp-base
。
一個公司會有不少項目,一個項目會有不少模塊,因此groupId
定義到到項目層次,artifactId
定義到模塊層次,當只有一個模塊時,artifactId
能夠是項目名稱。
1) 設置MAVEN_OPTS
環境變量
mvn
命令實際是執行了Java
命令,所以Java
命令可用的參數在運行mvn
時也可用。Java
默認的最大可用內存每每不可以知足Maven
運行的需求,通常將MAVEN_OPTS
的值設置爲-Xms128m –Xmx512m
,而且設置到環境變量,而不建議修改mvn.bat
或mvn
,升級的時候會被覆蓋,須要從新配置,麻煩而且容易忘記。
2) 配置用戶範圍的settings.xml
Maven
有兩個配置文件${m2_HOME}/conf/settings.xml
和${user}/.m2/settings.xml
前者是全局範圍的,整臺機器上全部用戶都會受該配置影響,然後者是用戶範圍的,只會影響當前用戶。
推薦配置用戶範圍的配置,能夠避免無心識影響其餘用戶,也能夠避免Maven
升級時,配置被覆蓋。
3) 不要使用IDE
內嵌的Maven
內嵌的Maven
版本一般會比較新,但不必定穩定,並且每每與命令行使用的Maven
不是同個版本,所以因爲不穩定,可能會出現一些難以理解的問題,其次版本不一致可能致使構建行爲不一致。