項目jar包管理構建工具---Maven

1、what is Maven?

        咱們來尋找一下官網,裏面介紹了maven究竟是什麼?下面一句話就有講解到:Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.  這句話什麼意思是,翻譯過來就是說 :Apache Maven是基於項目對象模型(POM project object model),能夠經過一小段描述信息(配置)來管理項目的構建,報告和文檔的軟件項目管理工具。apache

        Maven的核心功能即是合理敘述項目間的依賴關係,通俗點講,就是經過pom.xml文件的配置獲取jar包,而不用手動去添加jar包。服務器

2、maven的安裝以及使用

    1)、第一步,下載maven

              如下提供maven官方下載地址:http://maven.apache.org/download.cgi,方便你們下載最新的maven包。maven

 

           右頁面往下翻就能找到下面的內容。工具

    2)、配置環境變量

           win10--》此電腦 --》右鍵 --》屬性 --》高級系統設置 --》高級 --》找到環境變量,在系統變量中新建系統變量,變量名爲MAVEN_HOME,變量值爲maven的安裝路徑,如圖所示:測試

                                                 

          這是我安裝maven的路徑。在系統文件中找到path變量名,編輯,在path環境變量最後附加上";%MAVEN_HOME%\bin";打開cmd,在控制檯上面輸入「 mvn -version 」,若是出現下面的圖,則表示成功;   ui

           當運行完畢,會在當前用戶目錄下生成一個「 .m2 」目錄,,該目錄下會生成一個maven倉庫目錄(repository),若是在該目錄下建立setting.xml文件,那麼在maven在加載的過程當中會優先加載該setting.xml文件。this

     3)、maven加載順序

             maven加載順序是第一會去尋找用戶目錄下的那個".m2"目錄的setting.xml文件,若是沒有該xml文件,則會去尋找咱們maven安裝目錄下的conf目錄中的setting.xml文件。加載過程圖以下所示:url

                                      

     4)、配置setting.xml

        咱們須要在setting.xml文件中配置本地倉庫(<localRepository>),值指向的是本地倉庫目錄路徑,好比:<localRepository>D:\maven_repository</localRepository>,這是我配置本地倉庫的例子;爲了加速maven項目中jar包的下載速度,咱們能夠配置鏡像,在setting.xml文件中找打「<mirrors>」結點,在該結點內部配置鏡像,下面提供相關鏡像,便於大夥們提升開發效率。spa

<mirrors>
		<mirror>  
		  <id>alimaven</id>  
		  <name>aliyun maven</name>  
		  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
		  <mirrorOf>central</mirrorOf>          
		</mirror> 
		<mirror>
			<id>ui</id>
			<mirrorOf>central</mirrorOf>
			<name>Human Readable Name for this Mirror.</name>
			<url>http://uk.maven.org/maven2/</url>
		</mirror>
		<mirror>
            <id>osc</id>
            <mirrorOf>central</mirrorOf>
            <url>http://maven.oschina.net/content/groups/public/</url>
        </mirror>
        <mirror>
            <id>osc_thirdparty</id>
            <mirrorOf>thirdparty</mirrorOf>
            <url>http://maven.oschina.net/content/repositories/thirdparty/</url>
        </mirror>
  </mirrors>

    5)、配置代理服務器(可選)

       maven項目在編譯、測試、打包裏,會須要從maven的中央倉庫(即:maven組織公佈在互聯網上的一個站點,裏面已經收錄了目前絕大多數主流的jar包)下載jar包等文件,若是使用代理服務器上網,須要配置代理服務器。操作系統

把%MAVEN_HOME%\conf\settings.xml複製一份到本地倉庫C:\Users\當前用戶名\.m2\下,而後編輯該文件,找到下面這段

<proxies>
    <!-- proxy
     | Specification for one proxy, to be used in connecting to the network.
     |
    <proxy>
      <id>optional</id>
      <active>true</active>
      <protocol>http</protocol>
      <username>proxyuser</username>
      <password>proxypass</password>
      <host>proxy.host.net</host>
      <port>80</port>
      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>
    -->
  </proxies>

      把註釋去掉,host這裏填寫代理服務器的地址(能夠用IP)以及port端口,若是須要用戶名/密碼認證,則填寫username/password節點,不然username/password這二個節點去掉,nonProxyHosts表示某些地址不須要通過代理服務器,多個地址之間用|分隔,支持通配符,好比172.156.* 

    6)、maven中setting.xml配置文件中的配置元素

            1.localRepository

               表示Maven用來在本地儲存信息的本地倉庫的目錄。默認是用戶家目錄下面的.m2/repository目錄。

             2.interactiveMode

               表示是否使用交互模式,默認是true;若是設爲false,那麼當Maven須要用戶進行輸入的時候,它會使用一個默認值。

             3.offline

               表示是否離線,默認是false。這個屬性表示在Maven進行項目編譯和部署等操做時是否容許Maven進行聯網來下載所須要的信息。

            4.pluginGroups

               在pluginGroups元素下面能夠定義一系列的pluginGroup元素。表示當經過plugin的前綴來解析plugin的時候到哪裏尋找。pluginGroup元素指定的是plugin的groupId。默認狀況下,Maven會自動把org.apache.maven.plugins和org.codehaus.mojo添加到pluginGroups下。

            5.proxies

        其下面能夠定義一系列的proxy子元素,表示Maven在進行聯網時須要使用到的代理。當設置了多個代理的時候第一個標記active爲true的代理將會被使用。下面是一個使用代理的例子:

<proxies>
  <proxy>
      <id>xxx</id>
      <active>true</active>
      <protocol>http</protocol>
      <username>用戶名</username>
      <password>密碼</password>
      <host>代理服務器地址</host>
      <port>代理服務器的端口</port>
      <nonProxyHosts>不使用代理的主機</nonProxyHosts>
  </proxy>
</proxies>

             6.servers

            其下面能夠定義一系列的server子元素,表示當須要鏈接到一個遠程服務器的時候須要使用到的驗證方式。(當你配置了私服服務器,而登陸私服服務器的時候須要用戶名和密碼。)這主要有username/password和privateKey/passphrase這兩種方式。如下是一個使用servers的示例:

<servers>
    <server>
      <id>id</id>
      <username>用戶名</username>
      <password>密碼</password>
    </server>
  </servers>

              7.mirrors

    用於定義一系列的遠程倉庫的鏡像。如下是一個使用mirrors的例子:

<mirrors>
    <mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>定義一個容易看懂的名稱 </name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>
</mirrors>

                 id:是用來區別mirror的,全部的mirror不能有相同的id

                mirrorOf:用來表示該mirror是關聯的哪個倉庫,其值爲其關聯倉庫的id。當要同時關聯多個倉庫時,這多個倉庫之間能夠用逗號隔開;當要關聯全部的倉庫時,可使用「*」表示;當要關聯除某一個倉庫之外的其餘全部倉庫時,能夠表示爲「*,!repositoryId」;當要關聯不是localhost或用file請求的倉庫時,能夠表示爲「external:*」。

                url:表示該鏡像的url。當Maven在創建系統的時候就會使用這個url來鏈接到咱們的遠程倉庫。

                8.profiles

        用於指定一系列的profile。profile元素由activation、repositories、pluginRepositories和properties四個元素組成。當一個profile在settings.xml中是處於活動狀態而且在pom.xml中定義了一個相同id的profile時,settings.xml中的profile會覆蓋pom.xml中的profile

                activation:這是profile中最重要的元素。跟pom.xml中的profile同樣,settings.xml中的profile也能夠在特定環境下改變一些值,而這些環境是經過activation元素來指定的。

       看下面一個例子:

<profiles>
    <profile>
      <id>test</id>
      <activation>
        <activeByDefault>false</activeByDefault>
        <jdk>1.6</jdk>
        <os>
          <name>Windows 7</name>
          <family>Windows</family>
          <arch>x86</arch>
          <version>5.1.2600</version>
        </os>
        <property>
          <name>mavenVersion</name>
          <value>2.0.3</value>
        </property>
        <file>
          <exists>${basedir}/file2.properties</exists>
          <missing>${basedir}/file1.properties</missing>
        </file>
      </activation>
      ...
    </profile>
  </profiles>

在上面這段代碼中,當全部的約束條件都知足的時候就會激活這個profile。

jdk:表示當jdk的版本知足條件的時候激活,在這裏是1.6。這裏的版本還能夠用一個範圍來表示,如

<jdk>[1.4,1.7)</jdk>表示1.四、1.5和1.6知足;

<jdk>[1.4,1.7]</jdk>表示1.四、1.五、1.6和1.7知足;

os:表示當操做系統知足條件的時候激活。

property:property是鍵值對的形式,表示當Maven檢測到了這樣一個鍵值對的時候就激活該profile。

①下面的示例表示當存在屬性hello的時候激活該profile。

<property>
       <name>hello</name>
</property>

②下面的示例表示當屬性hello的值爲world的時候激活該profile。

<property>
       <name>hello</name>
       <value>world</value>
</property>

這個時候若是要激活該profile的話,能夠在調用Maven指令的時候加上參數hello並指定其值爲world,如:mvn compile –Dhello=world

              file:表示當文件存在或不存在的時候激活,exists表示存在,missing表示不存在。以下面的例子表示當文件hello/world不存在的時候激活該profile。

<profile>
       <activation>
              <file>
                     <missing>hello/world</missing>
              </file>
       </activation>
</profile>

             activaByDefault:當其值爲true的時候表示若是沒有其餘的profile處於激活狀態的時候,該profile將自動被激活。

        properties:用於定義屬性鍵值對的。當該profile是激活狀態的時候,properties下面指定的屬性均可以在pom.xml中使用。

        repositories:用於定義遠程倉庫的,當該profile是激活狀態的時候,這裏面定義的遠程倉庫將做爲當前pom的遠程倉庫。

<repositories>
        <repository>
          <id>codehausSnapshots</id>
          <name>Codehaus Snapshots</name>
          <releases>
            <enabled>false</enabled>
            <updatePolicy>always</updatePolicy>
            <checksumPolicy>warn</checksumPolicy>
          </releases>
          <snapshots>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
            <checksumPolicy>fail</checksumPolicy>
          </snapshots>
          <url>http://snapshots.maven.codehaus.org/maven2</url>
          <layout>default</layout>
        </repository>
      </repositories>

    releases、snapshots:這是對於工件的類型的限制。

  enabled:表示這個倉庫是否容許這種類型的工件

  updatePolicy:表示多久嘗試更新一次。可選值有always、daily、interval:minutes(表示每多久更新一次)和never。

  checksumPolicy:當Maven在部署項目到倉庫的時候會連同校驗文件一塊兒提交,checksumPolicy表示當這個校驗文件缺失或不正確的時候該如何處理,可選項有ignore、fail和warn。

               pluginRepositories:在Maven中有兩種類型的倉庫,一種是存儲工件的倉庫,另外一種就是存儲plugin插件的倉庫。pluginRepositories的定義和repositories的定義相似,它表示Maven在哪些地方能夠找到所須要的插件。

               activeProfiles:底包含一系列的activeProfile元素,表示對於全部的pom都處於活躍狀態的profile。如:

<activeProfiles>
    <activeProfile>alwaysActiveProfile</activeProfile>
    <activeProfile>anotherAlwaysActiveProfile</activeProfile>
  </activeProfiles>
相關文章
相關標籤/搜索