【Java EE 學習 82 上】【MAVEN基本安裝和使用方法】

1、Maven概述

  1.什麼是Maven?

    Maven中文意思是"行家"、"專家",它是一種跨平臺的項目管理工具。html

  2.Maven有什麼做用?

    Maven可以實現基於Java平臺的項目構建、依賴管理和項目信息管理。java

  3.什麼是理想的項目構建?

    高度自動化,跨平臺,可重用組件,符合標準化的規範spring

  4.什麼是依賴,爲何要進行依賴管理?

    自動下載,統一依賴管理,方便項目升級和修改apache

  5.項目信息包括哪些內容?

    項目名稱描述、開發人員信息、開發者信息等。框架

  Maven官方下載地址:http://maven.apache.org/download.cgieclipse

  Eclipse插件更新地址:http://www.eclipse.org/m2e/maven

  安裝過程見官方文檔說明:http://maven.apache.org/install.htmlhttp://maven.apache.org/configure.htmlide

2、Ant比較Maven

  Ant和Maven都是apache下的工程,在早些時候,Ant很是流行,像是spring框架和hibernate框架都使用了該項目管理工具進行項目的構建,可是如今到他們的官網上查看項目結構,能夠看出,他們都已經使用Maven管理最新的項目了,爲了實現過渡,中間曾經出現過Maven和Ant共存的狀況,這樣卻是方便了用戶的選擇,可是如今這種狀況已經沒有了,或者說極少出現了,如今各大公司都直接使用Maven管理項目而拋棄了Ant。工具

  1.Ant的劣勢

    (1)沒有一個約定的目錄結構

    (2)必須明確讓Ant作什麼,何時作,而後編譯、打包

    (3)沒有生命週期,必須定義目標和其實現的任務序列

    (4)沒有繼承依賴管理

  2.Maven取代Ant的優點

    (1)擁有約定的目錄結構,不須要配置Maven就知道你的代碼放到了哪裏

    (2)擁有一個生命週期,好比使用命令mvn install就能夠自動執行編譯、測試、打包、安裝到Maven倉庫等過程

    (3)擁有依賴管理、倉庫管理

3、Maven的配置

  1.兩種settings.xml配置文件

    *  MAVEN_HOME/conf/settings.xml,這是全局的配置文件post

    *  ~/.m2/settings.xml配,這是單個用戶的配置文件

  2.Maven約定的目錄結構

    項目文件夾

      |------src                

          |------main                          

              |------java          //存放項目的java文件

              |------resources        //存放項目資源文件,如spring、hibernate的配置文件

          |------test              

              |------java          //存放全部測試的java文件

              |------resources        //存放測試須要的資源文件,如spring、hibernate的配置文件

      |------target                 //存放項目生成的目標代碼、資源文件等

      |------pom.xml                 //項目核心配置文件

  3.pom.xml配置文件中的標籤講解

    詳細配製方法見英文文檔:http://maven.apache.org/pom.html

    POM是"Project Object Model"的英文縮寫,

    (1)一個完整的pom.xml配置文件的格式以下:

 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>

    (2)最簡單的配置文件格式:

 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命令的話須要將項目生成的文件打包成什麼樣的類型,支持的類型以下:

      pomjarmaven-pluginejbwarearrarpar

    dependencies:該標籤的做用就是聲明依賴的項目或者jar包,每個依賴都是用dependendy標籤來單獨聲明,聲明的內容除了使用groupId、artifactId和version定位項目以外,還要有一個scope標籤用來指定做用範圍,其做用和java中的註解有些類似;理解這個須要先搞定maven項目的構建過程:

    

    scope的全部支持類型:

      compile:編譯時有效,做用在上圖中的編譯階段

      test:測試時有效,做用在上圖中的測試階段

      runtime:運行時有效,做用在測試階段和之後的階段

      provided:顧名思義,當該項目運行的容器中提供了該jar包的時候(測試運行的時候沒有該環境),須要將該依賴聲明爲provided,這樣jar包就不會拷貝到運行的容器中了,這樣可以防止jar包衝突問題的發生。

      system:其做用和provided相似,可是須要除去一點,該jar包在本地maven庫中不存在(有疑問)。

4、maven項目的生命週期

  什麼是生命週期?從建立到死亡的過程就是生命週期,一個比較完整的聲明週期以下:

  • validate
  • 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                                                                                  接受編譯好的代碼,打包成可發佈的格式,如 JAR 
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install                                                                                     將包安裝至本地倉庫,以讓其它項目依賴
  • deploy                                                                                    將最終的包複製到遠程的倉庫,以讓其它開發人員與項目共享。

  maven可以實現高度的自動化,當咱們執行mvn compile命令的時候,其生命週期以前的命令都會依次執行一遍;同理,當咱們執行mvn test命令的時候,包括mvn compile命令在內,其以前的命令都會依次執行一遍。

5、兩個簡單項目的練習

  1.Hello項目,如下是maven項目的實際結構示意圖

  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 }
com.kdyzm.main.Hello.java
 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 }
com.kdyzm.main.test.HelloTest.java
 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>
Hello/pom.xml

  使用maven命令進行管理:            

  1. mvn compile                       該命令可以將源代碼編譯,生成的class文件保存到了target文件夾中。
  2. mvn clean                           該命令可以將target文件夾刪除掉
  3. mvn clean test                 該命令是一個組合命令,它可以先執行mvn clean命令,再執行mvn test命令
  4. mvn package                       該命令是一個打包的命令,根據配置文件的不一樣,它會將生成的文件打包成不一樣的類型
  5. mvn install                          該命令會先將項目打包,以後再將相關的jar包和配置文件拷貝到maven倉庫中
  6. mvn clean install                  該命令也是一個組合命令,它可以先執行mvn clean命令,而後執行mvn install命令

 

  2.HelloFriend項目

  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 }
com.kdyzm.main.HelloFriend
 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 }
com.kdyzm.main.test.HelloFriendTest.java
<!--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>

6、maven倉庫

  當執行完成mvn install命令的時候,打包成jar的項目和相關配置文件就會保存到maven倉庫中以便於向其餘項目提供依賴,保存的目錄是:~/.m2/repository/$groupId/$artifactId

  例如以上兩個項目執行完成mvn install命令以後,若是沒有錯誤,那麼在我電腦對應的目錄上就會出現一下文件和目錄:

  

相關文章
相關標籤/搜索