Maven中文意思是"行家"、"專家",它是一種跨平臺的項目管理工具。html
Maven可以實現基於Java平臺的項目構建、依賴管理和項目信息管理。java
高度自動化,跨平臺,可重用組件,符合標準化的規範spring
自動下載,統一依賴管理,方便項目升級和修改apache
項目名稱描述、開發人員信息、開發者信息等。框架
Maven官方下載地址:http://maven.apache.org/download.cgieclipse
Eclipse插件更新地址:http://www.eclipse.org/m2e/maven
安裝過程見官方文檔說明:http://maven.apache.org/install.html、http://maven.apache.org/configure.htmlide
Ant和Maven都是apache下的工程,在早些時候,Ant很是流行,像是spring框架和hibernate框架都使用了該項目管理工具進行項目的構建,可是如今到他們的官網上查看項目結構,能夠看出,他們都已經使用Maven管理最新的項目了,爲了實現過渡,中間曾經出現過Maven和Ant共存的狀況,這樣卻是方便了用戶的選擇,可是如今這種狀況已經沒有了,或者說極少出現了,如今各大公司都直接使用Maven管理項目而拋棄了Ant。工具
* MAVEN_HOME/conf/settings.xml,這是全局的配置文件post
* ~/.m2/settings.xml配,這是單個用戶的配置文件
項目文件夾
|------src
|------main
|------java //存放項目的java文件
|------resources //存放項目資源文件,如spring、hibernate的配置文件
|------test
|------java //存放全部測試的java文件
|------resources //存放測試須要的資源文件,如spring、hibernate的配置文件
|------target //存放項目生成的目標代碼、資源文件等
|------pom.xml //項目核心配置文件
詳細配製方法見英文文檔:http://maven.apache.org/pom.html
POM是"Project Object Model"的英文縮寫,
1 <project xmlns="http://maven.apache.org/POM/4.0.0" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 4 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <!-- The Basics --> 8 <groupId>...</groupId> 9 <artifactId>...</artifactId> 10 <version>...</version> 11 <packaging>...</packaging> 12 <dependencies>...</dependencies> 13 <parent>...</parent> 14 <dependencyManagement>...</dependencyManagement> 15 <modules>...</modules> 16 <properties>...</properties> 17 18 <!-- Build Settings --> 19 <build>...</build> 20 <reporting>...</reporting> 21 22 <!-- More Project Information --> 23 <name>...</name> 24 <description>...</description> 25 <url>...</url> 26 <inceptionYear>...</inceptionYear> 27 <licenses>...</licenses> 28 <organization>...</organization> 29 <developers>...</developers> 30 <contributors>...</contributors> 31 32 <!-- Environment Settings --> 33 <issueManagement>...</issueManagement> 34 <ciManagement>...</ciManagement> 35 <mailingLists>...</mailingLists> 36 <scm>...</scm> 37 <prerequisites>...</prerequisites> 38 <repositories>...</repositories> 39 <pluginRepositories>...</pluginRepositories> 40 <distributionManagement>...</distributionManagement> 41 <profiles>...</profiles> 42 </project>
1 <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"> 2 <modelVersion>4.0.0</modelVersion> 3 <groupId>com.kdyzm.hello</groupId> 4 <artifactId>Hello</artifactId> 5 <version>0.0.1-SNAPSHOT</version> 6 <name>Hello</name> 7 8 <dependencies> 9 <dependency> 10 <groupId>junit</groupId> 11 <artifactId>junit</artifactId> 12 <version>4.9</version> 13 <scope>test</scope> 14 </dependency> 15 16 </dependencies> 17 </project>
根節點必須是project標籤;
modelVersion標誌了POM的版本,maven2和maven3只支持4.0.0,並且該聲明是必須的;
groupId、artifactId、version是maven座標組成的三大元素,這就涉及到了什麼是maven座標的問題;
座標,按照之前的理解,是用於惟一肯定空間中某一點的度量,這裏座標有着相同的含義,它用來惟一標識一個項目,具體到某一個版本號,groupId、artifactId、version三個元素共同肯定一個惟一的項目,它就像一個地址或者時間戳同樣,一個項目使用它標識本身在maven庫中的獨一無二的位置。
groupId:通常使用相似於com.kdyzm.main這種域名的形式來表示,體如今maven系統中,就是java包結構同樣的東西,這個字段不須要非得用這種形式,可是使用這種形式更加清晰,就像maven,它的工程都放到了以org.apache.maven爲groupId的文件夾中,體如今maven倉庫,其實就是org/apache/maven
artifacted:表明了工程的名字,不須要和真實的工程名字相一致,可是強烈推薦一致,方便記憶,不容易出錯。
version:版本號
package:決定若是執行mvn package命令的話須要將項目生成的文件打包成什麼樣的類型,支持的類型以下:
pom, jar, maven-plugin, ejb, war, ear, rar, par.
dependencies:該標籤的做用就是聲明依賴的項目或者jar包,每個依賴都是用dependendy標籤來單獨聲明,聲明的內容除了使用groupId、artifactId和version定位項目以外,還要有一個scope標籤用來指定做用範圍,其做用和java中的註解有些類似;理解這個須要先搞定maven項目的構建過程:
scope的全部支持類型:
compile:編譯時有效,做用在上圖中的編譯階段
test:測試時有效,做用在上圖中的測試階段
runtime:運行時有效,做用在測試階段和之後的階段
provided:顧名思義,當該項目運行的容器中提供了該jar包的時候(測試運行的時候沒有該環境),須要將該依賴聲明爲provided,這樣jar包就不會拷貝到運行的容器中了,這樣可以防止jar包衝突問題的發生。
system:其做用和provided相似,可是須要除去一點,該jar包在本地maven庫中不存在(有疑問)。
什麼是生命週期?從建立到死亡的過程就是生命週期,一個比較完整的聲明週期以下:
maven可以實現高度的自動化,當咱們執行mvn compile命令的時候,其生命週期以前的命令都會依次執行一遍;同理,當咱們執行mvn test命令的時候,包括mvn compile命令在內,其以前的命令都會依次執行一遍。
Hello
|------src
|------main
|------java
|------com/kdyzm/main/Hello.java
|------resources
|------test
|------java
|------com/kdyzm/main/test/HelloTest.java
|------resources
|------target
|------pom.xml
1 package com.kdyzm.main; 2 public class Hello 3 { 4 public int calculate(int input){ 5 System.out.println("獲得輸入參數是:"+input); 6 return input*input; 7 } 8 }
1 package com.kdyzm.main.test; 2 3 import org.junit.Test; 4 import com.kdyzm.main.Hello; 5 public class HelloTest 6 { 7 @Test 8 public void testHello(){ 9 Hello hello=new Hello(); 10 int result=hello.calculate(2); 11 System.out.println("計算獲得的結果是:"+result); 12 } 13 }
1 <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"> 2 <modelVersion>4.0.0</modelVersion> 3 <groupId>com.kdyzm.hello</groupId> 4 <artifactId>Hello</artifactId> 5 <version>0.0.1-SNAPSHOT</version> 6 <name>Hello</name> 7 8 <dependencies> 9 <dependency> 10 <groupId>junit</groupId> 11 <artifactId>junit</artifactId> 12 <version>4.9</version> 13 <scope>test</scope> 14 </dependency> 15 16 </dependencies> 17 </project>
使用maven命令進行管理:
HelloFriend
|------src
|------main
|------java
|------com/kdyzm/main/HelloFriend.java
|------resources
|------test
|------java
|------com/kdyzm/main/test/HelloFriendTest.java
|------resources
|------target
|------pom.xml
1 package com.kdyzm.main; 2 import com.kdyzm.main.Hello; 3 public class HelloFriend{ 4 public String sayHello(int input){ 5 System.out.println("HelloFriend類sayHello方法接收到的參數是:"+input); 6 Hello hello = new Hello(); 7 int result=hello.calculate(input); 8 return result+""; 9 } 10 }
1 package com.kdyzm.main.test; 2 import com.kdyzm.main.HelloFriend; 3 import org.junit.Test; 4 public class HelloFriendTest 5 { 6 @Test 7 public void testSayHello(){ 8 HelloFriend helloFriend=new HelloFriend(); 9 String result=helloFriend.sayHello(2); 10 System.out.println("testSayHello的執行結果是:"+result); 11 } 12 }
<!--pom.xml配置文件-->
1 <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"> 2 <modelVersion>4.0.0</modelVersion> 3 <groupId>com.kdyzm.hello</groupId> 4 <artifactId>HelloFriend</artifactId> 5 <version>0.0.1-SNAPSHOT</version> 6 <name>HelloFriend</name> 7 8 <dependencies> 9 <dependency> 10 <groupId>junit</groupId> 11 <artifactId>junit</artifactId> 12 <version>4.9</version> 13 <scope>test</scope> 14 </dependency> 15 16 <dependency> 17 <groupId>com.kdyzm.hello</groupId> 18 <artifactId>Hello</artifactId> 19 <version>0.0.1-SNAPSHOT</version> 20 <scope>compile</scope> 21 </dependency> 22 23 </dependencies> 24 </project>
當執行完成mvn install命令的時候,打包成jar的項目和相關配置文件就會保存到maven倉庫中以便於向其餘項目提供依賴,保存的目錄是:~/.m2/repository/$groupId/$artifactId
例如以上兩個項目執行完成mvn install命令以後,若是沒有錯誤,那麼在我電腦對應的目錄上就會出現一下文件和目錄: