Maven 介紹

本文主要介紹如下幾個部分:java

  1.  安裝目錄分析
  2. Maven 依賴
  3. 繼承和聚合
  4. 生命週期和插件

首先介紹一下Maven 名詞apache

  • POM(Project Object Model)項目對象模型
  • 座標groupId , artifactId , version ,packaging,classifier
  • Dependency
  • Plug-in:Maven是有插件組織的,它的每個功能都是由插件提供的
  • Repository:倉庫倉庫用來存放artifact的,能夠是本地倉庫,也能夠是遠程倉庫
  • Snapshot:快照 工程正在處於開發階段

安裝目錄分析框架

bin:包含了mvn運行的腳本;這些腳本用來配置Java命令,準備好classpath和相關的java系統屬性,而後執行java命令maven

boot:包含一個類加載器框架,maven 使用它加載本身的類庫ide

conf:settings.xml 在機器上全局配額maven的行爲測試

lib:maven 運行時須要的java 類庫;網站

~/.m2 默認只有repository 倉庫文件,通常用戶都會複製settings.xml 過來;spa

Maven 依賴插件

 1、Maven依賴配置命令行

  • groupId , artifactId , version 基本座標
  • Type 依賴的類型,默認是jar
  • Scope 依賴範圍( compile , test, provided, runtime, system )
  • Optional 標記依賴是否可選
  • Exclusions 用來排除傳遞的依賴

2、Maven 依賴範圍

1. compile :編譯依賴範圍。 編譯,測試,運行都有效,默認的選擇
2. test : 測試依賴範圍。測試有效,例如junit
3. provided : 已提依賴範圍。編譯,測試有效,例如 servlet ,運行時容器會提供實現
4. runtime :運行時依賴範圍。 運行和測試有效,例如 jdbc,編譯時只需相應的接口,測試和運行時才須要具體的實現
5. system :系統依賴範圍。 編譯,測試有效。使用此範圍的依賴必須經過systemPath元素顯式的指定依賴文件,於是
此類依賴是不經過Maven倉庫解析的,通常適合於本機測試環境下,依賴本地起的服務。

編譯、測試、運行 各自使用一套classpath,

依賴範圍就是用來控制依賴與這三種classpath的關係

3、傳遞性依賴

  • 假設A依賴於B,B依賴於C,咱們說A對於B是第一直接依賴,B對於C是第二直接依賴,A對於C是傳遞性依賴。
  • 表格的第一列是B在A中的依賴範圍,第一行是C在B中的依賴範圍,交叉的格子是C在A中的依賴範圍

 

4、依賴調解

  • 第一原則:路徑最近者優先
  • 第二原則:第一聲明優先

5、依賴歸類

 

Maven 繼承和聚合

1、繼承

  • dependencies即便在子項目中不寫該依賴項,那麼子項目仍然會從父項目中繼承該依賴項(所有繼承)
  • dependencyManagement裏只是聲明依賴,並不實現引入,所以子項目須要顯式的聲明須要用的依賴。若是不在子項目中聲明依賴,是不會從父項目中繼承下來的;只有在子項目中寫了該依賴項,而且沒有指定具體版本,纔會從父項目中繼承該項,而且version和scope都讀取自父pom;另外若是子項目中指定了版本號,那麼會使用子項目中指定的jar版本。

2、聚合

  • 方便快速構建
  • 一個命令構建多個模塊, 須要額外建立一個模塊,而後經過該模塊構建整個項目的全部模塊

 

 

生命週期和插件

  • Maven的生命週期就是爲了對全部的構建過程進行抽象和統一;編譯、測試、打包、集成測試、驗證、部署和站點的生成都能映射到一個生命週期上;
  • 生命週期是抽象的,不作任何實際的工做(如編譯源代碼),實際任務都交由插件來完成。每一個構建步驟均可以綁定一個或多個插件行爲;

 

1、三套生命週期

  • Clean Lifecycle 在進行真正的構建以前進行一些清理工做。
  • Default Lifecycle 構建的核心部分,編譯,測試,打包,部署等等。
  • Site Lifecycle 生成項目報告,站點,發佈站點。

一、Clean Lifecycle

 

二、Default生命週期

 

三、Site生命週期

 

2、命令行和生命週期

  • 從命令行執行maven 任務主要就是調用maven 的生命週期階段;
  • 各個生命週期相互獨立,一個生命週期的階段是有先後依賴的
  • 若是要同時執行多個生命週期的階段可在命令行輸入多個命令,中間以空格隔開
  • mvn clean ; mvn test; mvn clean install ;
  • mvn clean deploy site-deploy

3、插件

  • Maven生命週期與插件相互綁定,來完成實際的構建任務好比:編譯這一任務,它對應了default生命週期的compile這一階段,而maven-compiler-plugin 這一插件的compile的這一目標可以完成任務;
  • 一個插件包含多個功能,每一個功能就是一個插件目標;

一、內置綁定

 

            default 生命週期階段與插件目標的綁定關係圖:

 

 

二、自定義綁定

        一個常見的例子是建立項目的源碼jar包。內置的插件綁定關係中沒有涉及這一任務,所以須要用戶自行配置。maven-source-plugin能夠幫助咱們完成該任務,它的jar-no-fork目標可以將項目的主代碼打包成jar文件,能夠將其綁定到default生命週期的verify階段上,在執行完集成測試後和安裝構件以前建立源碼jar包。具體配置見下

 

 

三、插件配置

  • 用戶能夠配置插件目標參數,調整插件目標來執行任務;
  • 命令行插件配置
  • 使用語法:
  • maven命令 -D參數=參數值
  • 好比:mvn install -Dmaven.test.skip=true,其中maven命令爲install,參數爲maven.test.skip,參數值爲true,

四、pom中插件全局配置

 

五、獲取插件信息

  • 在線插件信息 http://maven.apache.org/plugins/
  • 使用maven-help-plugin 描述插件
  • 能夠運行以下命令來獲取maven-compiler-plugin2.1版本的信息:mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin:2.1

六、從命令行調用插件

  • 除了mvn命令激活生命週期階段從而執行綁定的插件目標外,還支持直接從命令行調用插件目標;
  • mvn help:describe-Dplugin=complier
  • mvn dependency:tree
  • help 是maven-help-plugin的目標前綴;
  • dependency是maven-dependency-plugin的目標前綴

七、經常使用Maven插件

  • maven-archetype-plugin  項目的骨架
  • maven-dependency-plugin最大的用途是幫助分析項目依賴,dependency:list可以列出項目最終解析到的依賴列表,dependency:tree能進一步的描繪項目依賴樹,dependency:analyze能夠告訴你項目依賴潛在的問題
  • maven-enforcer-plugin建一系列規則強制你們遵照,包括設定Java版本、設定Maven版本、禁止某些依賴、禁止 SNAPSHOT依賴
  • maven-help-plugin

 

 

 

 

網站支持

相關文章
相關標籤/搜索