天天看點

MavenMaven

Maven

概述

Maven是一個項目管理工具,它包含了一個項目對象模型 (Project Object Model),一組标準集合,一個項目生命周期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來運作定義在生命周期階段(phase)中插件(plugin)目标(goal)的邏輯。當你使用Maven的時候,你用一個明确定義的項目對象模型來描述你的項目,然後Maven可以應用橫切的邏輯,這些邏輯來自一組共享的(或者自定義的)插件。

Maven 有一個生命周期,當你運作 mvn install 的時候被調用。這條指令告訴 Maven 執行一系列的有序的步驟,直到到達你指定的生命周期。周遊生命周期旅途中的一個影響就是,Maven 運作了許多預設的插件目标,這些目标完成了像編譯和建立一個 JAR 檔案這樣的工作。

此外,Maven能夠很友善的幫你管理項目報告,生成站點,管理JAR檔案,等等。

核心功能

依賴管理

jar 有坐标定位 在Maven中,坐标是Jar包的唯一辨別,Maven通過坐标在倉庫中找到項目所需的Jar包。

一鍵建構

項目從編譯,測試,運作,打包,安裝,部署整個過程都交給maven進行管理

Maven倉庫

Maven倉庫用來存放Maven管理的所有Jar包。

Maven 倉庫是項目中依賴的第三方庫,這個庫所在的位置叫做倉庫。

本地(local)

Maven 的本地倉庫,在安裝 Maven 後并不會建立,它是在第一次執行 maven 指令的時候才被建立。

運作 Maven 的時候,Maven 所需要的任何構件都是直接從本地倉庫擷取的。如果本地倉庫沒有,它會首先嘗試從遠端倉庫下載下傳構件至本地倉庫,然後再使用本地倉庫的構件。

預設情況下,不管Linux還是 Windows,每個使用者在自己的使用者目錄下都有一個路徑名為 .m2/respository/ 的倉庫目錄。

maven的conf目錄中有 settings.xml ,是maven的配置檔案,做如下配置:

** D:\Program Files\maven\myrepository

JDK配置

JDK-1.8 true 1.8

中央(central)

Maven 中央倉庫是由 Maven 社群提供的倉庫,其中包含了大量常用的庫。

中央倉庫包含了絕大多數流行的開源Java構件,以及源碼、作者資訊、SCM、資訊、許可證資訊等。一般來說,簡單的Java項目依賴的構件都可以在這裡下載下傳到。

中央倉庫的關鍵概念:

  • 這個倉庫由 Maven 社群管理。
  • 不需要配置。
  • 需要通過網絡才能通路。

遠端(remote)

如果 Maven 在中央倉庫中也找不到依賴的檔案,它會停止建構過程并輸出錯誤資訊到控制台。為避免這種情況,Maven 提供了遠端倉庫的概念,它是開發人員自己定制倉庫,包含了所需要的代碼庫或者其他工程中用到的 jar 檔案。

公司範圍内共享的倉庫,不對外開放。

可以通過 Nexus來建立、管理一個私服。

私服是架設在區域網路的一種特殊的遠端倉庫,目的是代理遠端倉庫及部署第三方構件。

有了私服之後,當 Maven 需要下載下傳依賴時,直接請求私服,私服上存在則下載下傳到本地倉庫;否則,私服請求外部的遠端倉庫,将構件下載下傳到私服,再提供給本地倉庫下載下傳。

私服可以解決在企業做開發時每次需要的jar包都要在中心倉庫下載下傳,且每次下載下傳完隻能被自己使用,不能被其他開發人員使用

所謂私服就是一個伺服器,但是不是本地層面的,是公司層面的,公司中所有的開發人員都在使用同一個私服

除中央倉庫之外,還有其他遠端倉庫。

比如aliyun倉庫(http://maven.aliyun.com/nexus/content/groups/public/)

中央倉庫在國外,下載下傳依賴速度過慢,是以都會配置一個國内的公共倉庫替代中央倉庫。

alimaven central aliyun maven http://maven.aliyun.com/nexus/content/repositories/central/ repo1 central Human Readable Name for this Mirror. http://repo1.maven.org/maven2/ repo2 central Human Readable Name for this Mirror. http://repo2.maven.org/maven2/

當我們執行 Maven 建構指令時,Maven 開始按照以下順序查找依賴的庫:

  • 步驟 1 - 在本地倉庫中搜尋,如果找不到,執行步驟 2,如果找到了則執行其他操作。
  • 步驟 2 - 在中央倉庫中搜尋,如果找不到,并且有一個或多個遠端倉庫已經設定,則執行步驟 4,如果找到了則下載下傳到本地倉庫中以備将來引用。
  • 步驟 3 - 如果遠端倉庫沒有被設定,Maven 将簡單的停滞處理并抛出錯誤(無法找到依賴的檔案)。
  • 步驟 4 - 在一個或多個遠端倉庫中搜尋依賴的檔案,如果找到則下載下傳到本地倉庫以備将來引用,否則 Maven 将停止處理并抛出錯誤(無法找到依賴的檔案)。
Maven 倉庫預設在國外, 國内使用難免很慢,我們可以更換為阿裡雲的倉庫。
MavenMaven

Maven規定的目錄結構

MavenMaven

Maven基本指令

  1. compile:編譯

    将java源檔案編譯成class檔案

  2. test:測試項目

    執行test目錄下的測試用例

  3. package:打包

    将項目打成jar包

  4. clean:删除target檔案夾
  5. install:安裝

    将目前項目放到Maven的本地倉庫中。供其他項目使用

**-v😗*查詢Maven版本

本指令用于檢查maven是否安裝成功。

Maven安裝完成之後,在指令行輸入****mvn -v****,若出現maven資訊,則說明安裝成功。

Maven 生命周期

Maven 有以下三個标準的生命周期:

  • clean:項目清理的處理
  • default(或 build):項目部署的處理
編譯 compile 執行編譯 源代碼編譯在此階段完成
測試 Test 測試 使用适當的單元測試架構(例如JUnit)運作測試。
包裝 package 打包 建立JAR/WAR包如在 pom.xml 中定義提及的包
檢查 verify 檢查 對內建測試的結果進行檢查,以保證品質達标
安裝 install 安裝 安裝打包的項目到本地倉庫,以供其他項目使用
部署 deploy 部署 拷貝最終的工程包到遠端倉庫中,以共享給其他開發人員和工程
  • site:項目站點文檔建立的處理 (一般不用)

Maven 概念模型圖

MavenMaven
maven包含了一個項目對象模型(project object model),一組标準集合,一個項目生命周期(project lifecycle),一個依賴管理系統(dependency management system)和用來運作定義在生命周期階段中插件目标邏輯。
  • 項目對象模型pom

    一個maven工程都有一個pom.xml檔案,通過pom.xml檔案定義項目的坐标,項目依賴,項目的資訊,插件資訊等。

  • 依賴管理系統

    通過maven的依賴管理對項目所依賴的jar包進行統一的管理。通過坐标來實作的

  • 一個項目的生命周期(project lifecycle)

    maven通過一些指令來實作生命周期的各個過程。例如執行 mvn compile編譯等。

  • 一組标準集合

maven為整個項目管理過程定義一組标準,比如:通過maven建構工程有标準的目錄結構規範,有标準的生命周期階段,依賴管理有标準的坐标定義等。

  • 插件(plugin)目标(goal)

maven管理項目生命周期過程是基于插件完成的。

maven工程的依賴進階特性

依賴

傳遞依賴:如果我們的項目引用了一個Jar包,而該Jar包又引用了其他Jar包,那麼在預設情況下項目編譯時,Maven會把直接引用和簡潔引用的Jar包都下載下傳到本地。

排除依賴:如果我們隻想下載下傳直接引用的Jar包,那麼需要在pom.xml中做如下配置:(将需要排除的Jar包的坐标寫在中)

pom

若項目中多個Jar同時引用了相同的Jar時,會産生依賴沖突,但Maven采用了兩種避免沖突的政策,是以在Maven中是不存在依賴沖突的。

短路優先

​ 就近原則

​ 聲明優先

​ 若引用路徑長度相同時,在pom.xml中誰先被聲明,就使用誰。

為了統一管理版本号,可以使用properties标簽,裡面可以自定義版本的标簽名。在使用的地方使用${自定義标簽名}

聚合

将多個項目同時運作就稱為聚合。
1. <modules>
2. ​    <module>web-connection-pool</module>
3. ​    <module>web-java-crawler</module>
4. </modules>
    
 有一個父項目(app-parent)聚合很多子項目(app-util, app-dao, app-service, app-web)。每個項目,不管是父子,都含有一個pom.xml檔案。而且要注意的是,小括号中标出了每個項目的打包類型。父項目是pom,也隻能是pom。子項目有jar,或者war。根據它包含的内容具體考慮。
           

繼承

父pom配置:将需要繼承的Jar包的坐标放入标簽即可。

<dependencyManagement>
    <dependencies>
          <dependency>
            <groupId>cn.missbe.web.search</groupId>
            <artifactId>resource-search</artifactId>
            <packaging>pom</packaging>
            <version>1.0-SNAPSHOT</version>
          </dependency> 
    </dependencies>
</dependencyManagement>
子pom配置:
<parent>
      <groupId>父pom所在項目的groupId</groupId>
      <artifactId>父pom所在項目的artifactId</artifactId>
      <version>父pom所在項目的版本号</version>
</parent>
 <parent>
      <artifactId>resource-search</artifactId>
      <groupId>cn.missbe.web.search</groupId>
      <version>1.0-SNAPSHOT</version>
           

依賴範圍scope

在項目釋出過程中,幫助決定哪些構件被包括進來。欲知詳情請參考依賴機制。

  • compile 預設值,适用于所有階段(測試運作,編譯,運作,打包)
  • provided 類似compile,期望JDK、容器或使用者會提供這個依賴。如servlet-api.jar;适用于(測試運作,編譯)階段
  • runtime 隻在運作時使用,如 mysql的驅動jar,适用于(運作,測試運作)階段
  • test 隻在測試時使用,适用于(編譯,測試運作)階段,如 junit.jar
  • system Maven不會在倉庫中查找對應依賴,在本地磁盤目錄中查找;适用于(編譯,測試運作,運作)階段

Maven 插件

  • 概述

每個生命周期中都包含着一系列的階段(phase)。這些 phase 就相當于 Maven 提供的統一的接口,然後這些 phase 的實作由 Maven 的插件來完成。

我們在輸入 mvn 指令的時候 比如 mvn clean,clean 對應的就是 Clean 生命周期中的 clean 階段。但是 clean 的具體操作是由 maven-clean-plugin 來實作的。

是以說 Maven 生命周期的每一個階段的具體實作都是由 Maven 插件實作的。

  • 類型
Build plugins 在建構時執行,并在 pom.xml 的 元素中配置。
Reporting plugins 在網站生成過程中執行,并在 pom.xml 的 元素中配置。

下面是一些常用插件的清單:

插件 描述
clean 建構之後清理目标檔案。删除目标目錄。
compiler 編譯 Java 源檔案。
surefile 運作 JUnit 單元測試。建立測試報告。
jar 從目前工程中建構 JAR 檔案。
war 從目前工程中建構 WAR 檔案。
javadoc 為工程生成 Javadoc。
antrun 從建構過程的任意一個階段中運作一個 ant 任務的集合。

Idea-Maven

下載下傳maven安裝包,解壓即可使用 官網:(http://maven.apache.org/download.cgi)

配置maven環境變量

MavenMaven
MavenMaven
MavenMaven
  • 在idea中關聯本地安裝的maven
MavenMaven
  • 建立Maven項目
MavenMaven
MavenMaven
MavenMaven
MavenMaven

根據項目類型,在pom.xml中做出對應配置,添加配置:war/jar

4.0.0

com.qf

test01

1.0-SNAPSHOT

jar

  • 部署web項目
MavenMaven
MavenMaven
MavenMaven
MavenMaven
MavenMaven
MavenMaven
MavenMaven

pom.xml詳解

<?xml version="1.0" encoding="utf-8"?>
 
<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.0http://maven.apache.org/maven-v4_0_0.xsd">  
  <!--父項目的坐标。如果項目中沒有規定某個元素的值,
那麼父項目中的對應值即為項目的預設值。 
坐标包括group ID,artifact ID和 version。-->  
  <parent> 
    <!--被繼承的父項目的構件辨別符-->  
    <artifactId/>  
    <!--被繼承的父項目的全球唯一辨別符-->  
    <groupId/>  
    <!--被繼承的父項目的版本-->  
    <version/> 
  </parent>  
  <!--聲明項目描述符遵循哪一個POM模型版本。模型本身的版本很少改變,雖然如此,
但它仍然是必不可少的,這是為了當Maven引入了新的特性或者其他模型變更的時候,
確定穩定性。-->  
  <modelVersion>4.0.0</modelVersion>  
  <!--項目的全球唯一辨別符,通常使用全限定的包名區分該項目和其他項目。
并且建構時生成的路徑也是由此生成, 如com.mycompany.app生成的相對路徑為:
/com/mycompany/app-->  
  <groupId>cn.missbe.web</groupId>  
  <!-- 構件的辨別符,它和group ID一起唯一辨別一個構件。換句話說,
你不能有兩個不同的項目擁有同樣的artifact ID和groupID;在某個 
特定的group ID下,artifact ID也必須是唯一的。構件是項目産生的或使用的一個東西,
Maven為項目産生的構件包括:JARs,源碼,二進制釋出和WARs等。-->  
  <artifactId>search-resources</artifactId>  
  <!--項目産生的構件類型,例如jar、war、ear、pom。插件可以建立
他們自己的構件類型,是以前面列的不是全部構件類型-->  
  <packaging>war</packaging>  
  <!--項目目前版本,格式為:主版本.次版本.增量版本-限定版本号-->  
  <version>1.0-SNAPSHOT</version>  
  <!--項目的名稱, Maven産生的文檔用-->  
  <name>search-resources</name>  
  <!--項目首頁的URL, Maven産生的文檔用-->  
  <url>http://www.missbe.cn</url>  
  <!-- 項目的較長的描述, Maven 産生的文檔用。  當這個元素能夠用HTML格式描述時
(例如,CDATA中的文本會被解析器忽略,就可以包含HTML标 簽), 
不鼓勵使用純文字描述。如果你需要修改産生的web站點的索引頁面,
你應該修改你自己的索引頁檔案,而不是調整這裡的文檔。-->  
  <description>A maven project to study maven.</description>  
  <!--描述了這個項目建構環境中的前提條件。-->  
  <prerequisites> 
    <!--建構該項目或使用該插件所需要的Maven的最低版本-->  
    <maven/> 
  </prerequisites>  
  <!--建構項目需要的資訊-->  
  <build> 
    <!--該元素設定了項目源碼目錄,當建構項目的時候,
建構系統會編譯目錄裡的源碼。該路徑是相對于pom.xml的相對路徑。-->  
    <sourceDirectory/>  
    <!--該元素設定了項目腳本源碼目錄,該目錄和源碼目錄不同:
絕大多數情況下,該目錄下的内容 會被拷貝到輸出目錄(因為腳本是被解釋的,而不是被編譯的)。-->  
    <scriptSourceDirectory/>  
    <!--該元素設定了項目單元測試使用的源碼目錄,當測試項目的時候,
建構系統會編譯目錄裡的源碼。該路徑是相對于pom.xml的相對路徑。-->  
    <testSourceDirectory/>  
    <!--被編譯過的應用程式class檔案存放的目錄。-->  
    <outputDirectory/>  
    <!--被編譯過的測試class檔案存放的目錄。-->  
    <testOutputDirectory/>  
    <!--使用來自該項目的一系列建構擴充-->  
    <extensions> 
      <!--描述使用到的建構擴充。-->  
      <extension> 
        <!--建構擴充的groupId-->  
        <groupId/>  
        <!--建構擴充的artifactId-->  
        <artifactId/>  
        <!--建構擴充的版本-->  
        <version/> 
      </extension> 
    </extensions>  
    <!--這個元素描述了項目相關的所有資源路徑清單,例如和項目相關的屬性檔案,
這些資源被包含在最終的打封包件裡。-->  
    <resources> 
      <!--這個元素描述了項目相關或測試相關的所有資源路徑-->  
      <resource> 
        <!-- 描述了資源的目标路徑。該路徑相對target/classes目錄(例如${project.build.outputDirectory})。舉個例 子,如果你想資源在特定的包裡(org.apache.maven.messages),你就必須該元素設定為org/apache/maven /messages。
然而,如果你隻是想把資源放到源碼目錄結構裡,就不需要該配置。-->  
        <targetPath/>  
        <!--是否使用參數值代替參數名。參數值取自properties元素或者檔案裡配置的屬性,
檔案在filters元素裡列出。-->  
        <filtering/>  
        <!--描述存放資源的目錄,該路徑相對POM路徑-->  
        <directory/>  
        <!--包含的模式清單,例如**/*.xml.-->  
        <includes/>  
        <!--排除的模式清單,例如**/*.xml-->  
        <excludes/> 
      </resource> 
    </resources>  
    <!--這個元素描述了單元測試相關的所有資源路徑,例如和單元測試相關的屬性檔案。-->  
    <testResources> 
      <!--這個元素描述了測試相關的所有資源路徑,參見build/resources/resource元素的說明-->  
      <testResource> 
        <targetPath/>
        <filtering/>
        <directory/>
        <includes/>
        <excludes/> 
      </testResource> 
    </testResources>  
    <!--建構産生的所有檔案存放的目錄-->  
    <directory/>  
    <!--産生的構件的檔案名,預設值是${artifactId}-${version}。-->  
    <finalName/>  
    <!--當filtering開關打開時,使用到的過濾器屬性檔案清單-->  
    <filters/>  
    <!--子項目可以引用的預設插件資訊。該插件配置項直到被引用時才會被解析或綁定到生命周期。
給定插件的任何本地配置都會覆寫這裡的配置-->  
    <pluginManagement> 
      <!--使用的插件清單 。-->  
      <plugins> 
        <!--plugin元素包含描述插件所需要的資訊。-->  
        <plugin> 
          <!--插件在倉庫裡的group ID-->  
          <groupId/>  
          <!--插件在倉庫裡的artifact ID-->  
          <artifactId/>  
          <!--被使用的插件的版本(或版本範圍)-->  
          <version/>  
          <!--是否從該插件下載下傳Maven擴充(例如打包和類型處理器),由于性能原因,
隻有在真需要下載下傳時,該元素才被設定成enabled。-->  
          <extensions/>  
          <!--在建構生命周期中執行一組目标的配置。每個目标可能有不同的配置。-->  
          <executions> 
            <!--execution元素包含了插件執行需要的資訊-->  
            <execution> 
              <!--執行目标的辨別符,用于辨別建構過程中的目标,或者比對繼承過程中需要合并的執行目标-->  
              <id/>  
              <!--綁定了目标的建構生命周期階段,如果省略,目标會被綁定到源資料裡配置的預設階段-->  
              <phase/>  
              <!--配置的執行目标-->  
              <goals/>  
              <!--配置是否被傳播到子POM-->  
              <inherited/>  
              <!--作為DOM對象的配置-->  
              <configuration/> 
            </execution> 
          </executions>  
          <!--項目引入插件所需要的額外依賴-->  
          <dependencies> 
            <!--參見dependencies/dependency元素-->  
            <dependency>......</dependency> 
          </dependencies>  
          <!--任何配置是否被傳播到子項目-->  
          <inherited/>  
          <!--作為DOM對象的配置-->  
          <configuration/> 
        </plugin> 
      </plugins> 
    </pluginManagement>  
    <!--使用的插件清單-->  
    <plugins> 
      <!--參見build/pluginManagement/plugins/plugin元素-->  
      <plugin> 
        <groupId/>
        <artifactId/>
        <version/>
        <extensions/>  
        <executions> 
          <execution> 
            <id/>
            <phase/>
            <goals/>
            <inherited/>
            <configuration/> 
          </execution> 
        </executions>  
        <dependencies> 
          <!--參見dependencies/dependency元素-->  
          <dependency>......</dependency> 
        </dependencies>  
        <goals/>
        <inherited/>
        <configuration/> 
      </plugin> 
    </plugins> 
  </build>  
  <!--子產品(有時稱作子項目) 被建構成項目的一部分。
列出的每個子產品元素是指向該子產品的目錄的相對路徑-->  
  <modules/>  
  <!--發現依賴和擴充的遠端倉庫清單。-->  
  <repositories> 
    <!--包含需要連接配接到遠端倉庫的資訊-->  
    <repository> 
      <!--如何處理遠端倉庫裡釋出版本的下載下傳-->  
      <releases> 
        <!--true或者false表示該倉庫是否為下載下傳某種類型構件(釋出版,快照版)開啟。 -->  
        <enabled/>  
        <!--該元素指定更新發生的頻率。Maven會比較本地POM和遠端POM的時間戳。這裡的選項是:always(一直),daily(預設,每日),interval:X(這裡X是以分鐘為機關的時間間隔),或者never(從不)。-->  
        <updatePolicy/>  
        <!--當Maven驗證構件校驗檔案失敗時該怎麼做:ignore(忽略),fail(失敗),或者warn(警告)。-->  
        <checksumPolicy/> 
      </releases>  
      <!-- 如何處理遠端倉庫裡快照版本的下載下傳。有了releases和snapshots這兩組配置,
POM就可以在每個單獨的倉庫中,為每種類型的構件采取不同的 政策。
例如,可能有人會決定隻為開發目的開啟對快照版本下載下傳的支援。
參見repositories/repository/releases元素 -->  
      <snapshots> 
        <enabled/>
        <updatePolicy/>
        <checksumPolicy/> 
      </snapshots>  
      <!--遠端倉庫唯一辨別符。可以用來比對在settings.xml檔案裡配置的遠端倉庫-->  
      <id>banseon-repository-proxy</id>  
      <!--遠端倉庫名稱-->  
      <name>banseon-repository-proxy</name>  
      <!--遠端倉庫URL,按protocol://hostname/path形式-->  
      <url>http://192.168.1.169:9999/repository/</url>  
      <!-- 用于定位和排序構件的倉庫布局類型-可以是default(預設)或者legacy(遺留)。Maven 2為其倉庫提供了一個預設的布局;然 而,Maven 1.x有一種不同的布局。我們可以使用該元素指定布局是default(預設)還是legacy(遺留)。-->  
      <layout>default</layout> 
    </repository> 
  </repositories>  
  <!--發現插件的遠端倉庫清單,這些插件用于建構和報表-->  
  <pluginRepositories> 
    <!--包含需要連接配接到遠端插件倉庫的資訊.參見repositories/repository元素-->  
    <pluginRepository>......</pluginRepository> 
  </pluginRepositories>  
  <!--該元素描述了項目相關的所有依賴。 這些依賴組成了項目建構過程中的一個個環節。
它們自動從項目定義的倉庫中下載下傳。要擷取更多資訊,請看項目依賴機制。-->  
  <dependencies> 
    <dependency> 
      <!--依賴的group ID-->  
      <groupId>org.apache.maven</groupId>  
      <!--依賴的artifact ID-->  
      <artifactId>maven-artifact</artifactId>  
      <!--依賴的版本号。 在Maven 2裡, 也可以配置成版本号的範圍。-->  
      <version>3.8.1</version>  
      <!-- 依賴類型,預設類型是jar。它通常表示依賴的檔案的擴充名,但也有例外
。一個類型可以被映射成另外一個擴充名或分類器。類型經常和使用的打包方式對應,
 盡管這也有例外。一些類型的例子:jar,war,ejb-client和test-jar。
如果設定extensions為 true,就可以在 plugin裡定義新的類型。是以前面的類型的例子不完整。-->  
      <type>jar</type>  
      <!-- 依賴的分類器。分類器可以區分屬于同一個POM,但不同建構方式的構件。
分類器名被附加到檔案名的版本号後面。例如,如果你想要建構兩個單獨的構件成 JAR,
一個使用Java 1.4編譯器,另一個使用Java 6編譯器,你就可以使用分類器來生成兩個單獨的JAR構件。-->  
      <classifier/>  
      <!--依賴範圍。在項目釋出過程中,幫助決定哪些構件被包括進來。欲知詳情請參考依賴機制。    
                - compile :預設範圍,用于編譯      
                - provided:類似于編譯,但支援你期待jdk或者容器提供,類似于classpath      
                - runtime: 在執行時需要使用      
                - test:    用于test任務時使用      
                - system: 需要外在提供相應的元素。通過systemPath來取得      
                - systemPath: 僅用于範圍為system。提供相應的路徑      
                - optional:   當項目自身被依賴時,标注依賴是否傳遞。用于連續依賴時使用-->  
      <scope>test</scope>  
      <!--僅供system範圍使用。注意,不鼓勵使用這個元素,
并且在新的版本中該元素可能被覆寫掉。該元素為依賴規定了檔案系統上的路徑。
需要絕對路徑而不是相對路徑。推薦使用屬性比對絕對路徑,例如${java.home}。-->  
      <systemPath/>  
      <!--當計算傳遞依賴時, 從依賴構件清單裡,列出被排除的依賴構件集。
即告訴maven你隻依賴指定的項目,不依賴項目的依賴。此元素主要用于解決版本沖突問題-->  
      <exclusions> 
        <exclusion> 
          <artifactId>spring-core</artifactId>  
          <groupId>org.springframework</groupId> 
        </exclusion> 
      </exclusions>  
      <!--可選依賴,如果你在項目B中把C依賴聲明為可選,你就需要在依賴于B的項目(例如項目A)中顯式的引用對C的依賴。可選依賴阻斷依賴的傳遞性。-->  
      <optional>true</optional> 
    </dependency> 
  </dependencies>  
  <!-- 繼承自該項目的所有子項目的預設依賴資訊。這部分的依賴資訊不會被立即解析,
而是當子項目聲明一個依賴(必須描述group ID和 artifact ID資訊),
如果group ID和artifact ID以外的一些資訊沒有描述,
則通過group ID和artifact ID 比對到這裡的依賴,并使用這裡的依賴資訊。-->  
  <dependencyManagement> 
    <dependencies> 
      <!--參見dependencies/dependency元素-->  
      <dependency>......</dependency> 
    </dependencies> 
  </dependencyManagement>  
  <!--項目分發資訊,在執行mvn deploy後表示要釋出的位置。
有了這些資訊就可以把網站部署到遠端伺服器或者把構件部署到遠端倉庫。-->  
  <distributionManagement> 
    <!--部署項目産生的構件到遠端倉庫需要的資訊-->  
    <repository> 
      <!--是配置設定給快照一個唯一的版本号(由時間戳和建構流水号)?
還是每次都使用相同的版本号?參見repositories/repository元素-->  
      <uniqueVersion/>  
      <id>banseon-maven2</id>  
      <name>banseon maven2</name>  
      <url>file://${basedir}/target/deploy</url>  
      <layout/> 
    </repository>  
    <!--構件的快照部署到哪裡?如果沒有配置該元素,預設部署到repository元素配置的倉庫,
參見distributionManagement/repository元素-->  
    <snapshotRepository> 
      <uniqueVersion/>  
      <id>banseon-maven2</id>  
      <name>Banseon-maven2 Snapshot Repository</name>  
      <url>scp://svn.baidu.com/banseon:/usr/local/maven-snapshot</url>  
      <layout/> 
    </snapshotRepository>  
    <!--部署項目的網站需要的資訊-->  
    <site> 
      <!--部署位置的唯一辨別符,用來比對站點和settings.xml檔案裡的配置-->  
      <id>banseon-site</id>  
      <!--部署位置的名稱-->  
      <name>business api website</name>  
      <!--部署位置的URL,按protocol://hostname/path形式-->  
      <url>scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web</url> 
    </site>  
    <!--項目下載下傳頁面的URL。如果沒有該元素,使用者應該參考首頁。
使用該元素的原因是:幫助定位那些不在倉庫裡的構件(由于license限制)。-->  
    <downloadUrl/>  
    <!-- 給出該構件在遠端倉庫的狀态。不得在本地項目中設定該元素,
因為這是工具自動更新的。有效的值有:none(預設),
converted(倉庫管理者從 Maven 1 POM轉換過來),partner(直接從夥伴Maven 2倉庫同步過來),deployed(從Maven 2執行個體部 署),verified(被核實時正确的和最終的)。-->  
    <status/> 
  </distributionManagement>  
  <!--以值替代名稱,Properties可以在整個POM中使用,也可以作為觸發條件(見settings.xml配置檔案裡activation元素的說明)。格式是<name>value</name>。-->  
  <properties/> 
</project>
           

配站點和settings.xml檔案裡的配置–>

banseon-site

business api website

scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web

```