maven學習系列--maven的使用

1.maven安裝配置

安裝環境(windows): 確保已經安裝和正確配置了jdk.

1.1 添加    MAVEN_HOME  環境變量到 windows 環境變量,並將其指向你的 maven 的文件夾
1.2 添加   %MAVEN_HOME%\bin;   到 path 變量,這樣就可以在命令中的任何目錄下運行maven命令,
1.3 執行  cmd (開始-->運行-->cmd) mvn -version  顯示如圖既安裝成功,


2.maven啓動代理訪問

如果你的公司正在建立一個防火牆,並使用HTTP代理服務器來阻止用戶直接連接到互聯網。如果您使用代理,Maven將無法下載任何依賴。爲了使它工作,你必須聲明在 Maven 的配置文件中設置代理服務器:settings.xml.

2.1  找到文件 (你的maven地址)/conf/settings.xml, 並把你的代理服務器信息配置寫入,取消註釋代理選項,填寫您的代理服務器的詳細信息。

<!-- proxies
   | This is a list of proxies which can be used on this machine to connect to the network.
   | Unless otherwise specified (by system property or command-line switch), the first proxy
   | specification in this list marked as active will be used.
   |-->
  <proxies>
      <proxy>
      <id>optional</id>
      <active>true</active>
      <protocol>http</protocol>
      <username>hou</username>  <--- 需要配置的代理服務器的username
      <password>password</password>  
      <host>proxy.hou.com</host>  <--- 需要配置的代理服務器的 
      <port>8888</port>  <--- 需要配置的代理服務器的port
      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>
  </proxies>

2.2 完成後,maven應該是能夠通過代理服務器立即連接到Internet(不需要重啓maven)

3.maven本地資源

3.1 Maven的本地資源庫是用來存儲所有項目的依賴關係(插件jar和其他文件,這些文件被Maven下載)到本地文件夾, Maven的本地資源庫默認爲 .m2 目錄文件夾C:\Documents and Settings\{your-username}\.m2

3.2 更新maven本地庫地址, 通常情況下可以改變默認的.m2目錄下的默認本地庫到其他地址.  找到(你的maven地址)/conf/settings.xml, 更改 localRepository 到其他地址.

<settings><!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ~/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  --><localRepository>D:\maven\apache-maven\repository</localRepository>  <--- 在這裏更改要替換的其他目錄地址

3.3 更改保存之後新的maven本地存儲庫已經改爲 D:\maven\apache-maven\repository (當然 D:\maven\apache-maven\repository 這個路徑要存在對應文件夾纔可以.)

4.maven 中央存儲庫

當你建立一個 Maven 的項目,Maven 會檢查你的 pom.xml 文件,以確定下載哪些依賴。首先,Maven 將從本地資源庫獲得 Maven 的本地資源庫依賴資源,如果沒有找到,會從默認的 Maven 中央存儲庫 – http://repo1.maven.org/maven2/ 查找下載.

5.maven遠程資源庫

5.1 在Maven中,當你聲明的庫不存在於本地存儲庫中,也沒有存在於Maven中心儲存庫,將停止下載並將錯誤消息輸出到 Maven 控制檯。

Downloading in Maven is triggered by a project declaring a dependency that is not present in the local repository (or for a SNAPSHOT, when the remote repository contains one that is newer). By default, Maven will download from the central repository.
5.2  配置遠程資源庫

<project>  
  ...  
  <repositories>  
    <repository>  
      <id>jboss</id>  
      <name>JBoss Repository</name>  
      <url>http://repository.jboss.com/maven2/</url>  
      <releases>  
        <enabled>true</enabled>  
      </releases>  
    </repository>  
    <snapshots>  
      <enabled>false</enabled>  
    </snapshots>  
    <layout>default</layout>  
  </repositories>  
  ...  
</project> 

在repositories元素下,可以使用repository子元素聲明一個或者多個遠程倉庫。該例中聲明瞭一個id爲jboss,名稱爲JBoss Repository的倉庫。任何一個倉庫聲明的id必須是唯一的,尤其需要注意的是,maven自帶的中央倉庫使用的id爲central,如果其他的倉庫聲明也使用該id,就會覆蓋中央倉庫的配置。該配置中的url值指向了倉庫的地址,一般來說,該地址都基於http協議,maven用戶都可以在瀏覽器中打開倉庫地址瀏覽構件。
該例配置中的releases和snapshots元素比較重要,它們用來控制Maven對於發佈版構件和快照版構件的下載。該例中releases的enabled值爲true,表示開啓JBoss倉庫的發佈版本下載支持,而snapshots的enabled值爲false,表示關閉JBoss倉庫的快照版本的下載支持。該例中的layout元素值default表示倉庫的佈局是Maven2及Maven3的默認佈局,而不是Maven1的佈局。
對於releases和snapshots來說,除了enabled,它們還包含另外兩個子元素updatePolicy和checksumPolicy:

<snapshots>  
  <enabled>true</enabled>  
  <updatePolicy>daily</updatePolicy>  
  <checksumPolicy>ignore</checksumPolicy>  
</snapshots>  
元素updatePolicy用來配置Maven從遠程倉庫檢查更新的頻率,默認的值是daily,表示Maven每天檢查一次。其他可用的值包括:never---從不檢查更新;always---每次構建都檢查更新;interval:X---每隔X分鐘檢查一次更新(X爲任意整數)。
元素checksumPolicy用來配置Maven檢查檢驗和文件的策略。當構件被部署到Maven倉庫中時,會同時部署對應的校驗和文件。在下載構件的時候,Maven會驗證校驗和文件,如果校驗和驗證失敗,怎麼辦?當checksumPolicy的值爲默認的warn時,Maven會在執行構建時輸出警告信息,其他可用的值包括:fail---Maven遇到校驗和錯誤就讓構建失敗;ignore---使用Maven完全忽略校驗和錯誤。

5.3 遠程倉庫的認證

大部分遠程倉庫無須認證就可以訪問,但有時候出於安全方面的考慮,我們需要提認證信息才能訪問一些遠程倉庫。例如,組織內部有一個Maven倉庫服務器,該服務器爲每個項目都提供獨立的Maven倉庫,爲了防止非法的倉庫訪問,管理員爲每個倉庫提供了一組用戶名級密碼。這時,爲了能讓Maven訪問倉庫內容,就需要配置認證信息。
配置認證信息和配置倉庫信息不同,倉庫信息可以直接配置在POM文件中,但是認證信息必須配置在settings.xml文件中。這是因爲POM往往是被提交到代碼倉庫中供所有成員訪問的,而settings.xml一般只放在本機。因此,settings.xml中配置認證信息更爲安全。假設需要爲一個id爲my-proj的倉庫配置認證信息,編輯settings.xml文件見

settings>  
  ...  
  <servers>  
    <server>  
      <id>my-proj</id>  
      <username>repo-user</username>  
      <password>repo-pwd</password>  
    </server>  
  </servers>  
  ...  
</settings>  
5.4 部署至遠程倉庫

私服的一大作用是部署第三方構件,包括組織內部生成的構件以及一些無法從外部倉庫直接獲取的構件。無論是日常開發中生成的構件,還是正式版本發佈的構件,都需要部署到倉庫中,供其他團隊成員使用。
Maven除了能對項目進行編譯、測試、打包之外,還能將項目生成的構建部署到倉庫中。首先,需要編輯項目的pom.xml文件。配置distributionManagement元素,見代碼:

<project>  
  ...  
  <destributionManagement>  
    <repository>  
      <id>proj-releases</id>  
      <name>Proj Release Repository</name>  
      <url>http://192.168.1.100/content/repositories/proj-releases</url>  
    </repository>  
    <snapshotRepository>  
      <id>proj-snapshots</id>  
      <name>Proj Snapshot Repository</name>  
      <url>http://192.168.1.100/content/repositories/proj-snapshots</url>  
    </snapshotRepository>  
  </destributionManagement>  
  ...  
</project> 

distributionManagement包含repository和snapshotRepository子元素,前者表示發佈版本構件的倉庫,後者表示快照版本的倉庫。這兩個元素下都需要配置id、name和url,id爲該遠程倉庫的唯一標識,name是爲了方便人閱讀,關鍵的url表示該倉庫的地址。
往遠程倉庫部署構件的時候,往往需要認證。就是需要在settings.xml中創建一個server元素,其id與倉庫的id匹配,並配置正確的認證信息。不論遠程倉庫下載構件,還是部署構件至遠程倉庫,當需要認證的時候,配置的方式是一樣的。配置正確後,在命令行運行mvn clean deploy,Maven就會將項目構建輸出的構件部署到配置對應的遠程倉庫,如果項目當前的版本是快照版本,則部署到快照版本倉庫地址,否則就部署到發佈版本倉庫地址。  

6.maven依賴機制

在 Maven 依賴機制的幫助下自動下載所有必需的依賴庫,並保持版本升級

7.定製庫到maven本地資源庫

使用IDE插件。MyEclipse集成了Maven4MyEclipse插件,支持定製庫到Maven本地資源庫的導入。
File->Import,搜索Maven。


8.創建maven工程 (https://my.oschina.net/xuqiang/blog/99854  更詳細講解,推薦看)

maven 工程類型:  
1,.jar 包工程(Java項目)     
2. war包工程(web項目)     
3. pom工程(聚合項目)

8.1  maven jar項目

8.1.1:選擇 new→maven→Maven Project

8.1.2


8.1.3選擇 maven-archetype-quickstart  //創建Java項目


8.1.4 輸入項目信息


8.2 maven web項目

8.2.1 選擇 new→maven→Maven Project


8.2.2


8.2.3 


8.2.4 輸出項目信息


8.3 maven 聚合項目並添加子項目

8.3.1 創建Tman-parent 聚合項目

(結構圖)

Tman-parent                -- 管理依賴 jar 包的版本,全局,公司級別(pom聚合項目)
|--Tman-common             -- 通用組件、工具類(jar項目)
|--Tman-manage             -- 後臺系統(pom聚合項目)
|--com.Tman.manage.web     -- web項目(war項目)
|--com.Tman.manage.service -- service層(jar項目)
|--com.Tman.manage.mapper  -- mybatis的mapper(jar項目)
|--com.Tman.manage.pojo    -- pojo類(jar項目)



選擇 new→maven→Maven Project(不使用maven骨架)


8.3.2


8.3.2 然後依次建立Tman-common工程 ,依賴Tman-parent 工程


8.3.2創建Tman-manage聚合工程


創建Tman-manage聚合工程下的子工程,

創建Tman-manage-web(war工程)

1.選Maven-Module


2.填寫module name

3.選擇項目類型(war項目)


9.maven 命令

9.1  mvn compile 命令 ,完成編譯操作執行完畢後,會生成 target 目錄,該目錄中存放了編譯後的字節碼文件

9.2   mvn clean 命令 ,執行完畢後, 會將 target 目錄刪除。

9.3   mvn test 命令,完成單元測試操作

9.4  mvn package 命令,完成打包操作, 會在 target 目錄中生成一個文件,該文件可能是 jar、war

9.5  mvn install 命令,完成將打好的 jar 包安裝到本地倉庫的操作執行完畢後,會在本地倉庫中出現安裝後的 jar 包,方便其他工程引用

9.6   cmd 中錄入 mvn clean compile 命令組合指令,先執行 clean,再執行 compile,通常應用於上線前執行,清除測試類.

9.7  cmd 中錄入 mvn clean test 命令組合指令,先執行 clean,再執行 test,通常應用於測試環節.

9.8  cmd 中錄入 mvn clean package 命令組合指令,先執行 clean,再執行 package,將項目打包,通常應用於發佈前

執行過程:
清理————清空環境
編譯————編譯源碼
測試————測試源碼
打包————將編譯的非測試類打包

9.9   cmd 中錄入 mvn clean install 查看倉庫,當前項目被髮布到倉庫中組合指令,先執行 clean,再執行 install,將項目打包,通常應用於發佈前

執行過程:
清理————清空環境
編譯————編譯源碼
測試————測試源碼
傳智播客 Java 學院 傳智.關雲長
打包————將編譯的非測試類打包
部署————將打好的包發佈到資源倉庫中

10. maven 核心概念

groupId:定義當前 Maven 組織名稱
artifactId:定義實際項目名稱
version:定義當前項目的當前版本

10.1. maven 依賴管理

就是對項目中 jar 包的管理。可以在 pom 文件中定義 jar 包的 GAV 座標,管理依賴。依賴聲明主要包含如下元素:

<dependencies>
     <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.10</version>
          <scope>test</scope>
     </dependency>
</dependencies>

10.2  maven依賴範圍


其中依賴範圍 scope 用來控制依賴和編譯,測試,運行的 classpath 的關係. 主要的是三種依賴關係如下:

1.compile: 默認編譯依賴範圍。對於編譯,測試,運行三種 classpath 都有效
2.test:測試依賴範圍。只對於測試 classpath 有效
3.provided:已提供依賴範圍。對於編譯,測試的 classpath 都有效,但對於運行無效。因爲由容器已經提供,例如 servlet-api
4.runtime:運行時提供。例如:jdbc 驅動

10.3 依賴傳遞

10.3.1 直接依賴和間接依賴

如果 B 中使用 A,C 中使用 B,則稱 B 是 C 的 直接依賴,而稱 A 是 C 的 間接依賴。
C->B     B->A
C 直接依賴 B
C 間接依賴 A


10.3.2  依賴範圍對傳遞依賴的影響


左邊第一列表示第一直接依賴範圍
上面第一行表示第二直接依賴範圍
中間的交叉單元格表示傳遞性依賴範圍。
總結:

   當第二依賴的範圍是 compile 的時候,傳遞性依賴的範圍與第一直接依賴的範圍一致。
   當第二直接依賴的範圍是 test 的時候,依賴不會得以傳遞。 
   當第二依賴的範圍是 provided 的時候,只傳遞第一直接依賴範圍也爲 provided 的依賴,且傳遞性依賴的範圍同樣爲 provided;
   當第二直接依賴的範圍是 runtime 的時候,傳遞性依賴的範圍與第一直接依賴的範圍一致,但 compile 例外,此時傳遞的依賴範圍爲 runtime;

10.3.2 依賴衝突

如果直接與間接依賴中包含有同一個座標不同版本的資源依賴,以直接依賴的版本爲準.

如果直接依賴中包含有同一個座標不同版本的資源依賴,以配置順序下方的版本爲準.


推薦:   http://blog.csdn.net/u013755987/article/details/53088829











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章