1. 程式人生 > >Maven的setting配置詳解

Maven的setting配置詳解

一.Maven的setting配置檔案 和 在Eclipse中對Maven的正確配置。

1.Maven的配置檔案(Maven的安裝目錄/conf/settings.xml ) 和 Maven倉庫下(預設的Maven倉庫的是使用者家目錄下的.m2檔案,可以另行制定)的settings.xml檔案

在Maven中提供了一個settings.xml檔案來定義Maven的全域性環境資訊。這個檔案會存在於Maven的安裝目錄的conf子目錄下面,或者是使用者家目錄的.m2子目錄下面。我們可以通過這個檔案來定義本地倉庫、遠端倉庫和聯網使用的代理資訊等。

其實相對於多使用者的PC機而言,在Maven安裝目錄的conf子目錄下面的settings.xml才是真正的全域性的配置

。而使用者家目錄的.m2子目錄下面的settings.xml的配置只是針對當前使用者的

當這兩個檔案同時存在的時候,那麼對於相同的配置資訊使用者家目錄下面的settings.xml中定義的會覆蓋Maven安裝目錄下面的settings.xml中的定義。

使用者家目錄下的settings.xml檔案一般是不存在的,但是Maven允許我們在這裡定義我們自己的settings.xml,如果需要在這裡定義我們自己的settings.xml的時候就可以把Maven安裝目錄下面的settings.xml檔案拷貝到使用者家目錄的.m2目錄下,然後改成自己想要的樣子。

2.在Eclipse中正確的配置Maven(此處我的Maven倉庫由預設的使用者家目錄下的.m2檔案改成了F:\Development\m2\repository)

部落格園編輯器對圖片的顯示有壓縮,看高清大圖請點選:http://images2017.cnblogs.com/blog/610238/201710/610238-20171014114125668-433293838.png

 

二.settings.xml檔案中對應的配置項

 先來看看一個基本的settings.xml檔案中的內容:(如果使用預設的settings.xml檔案很多配置多都註釋掉了,只有一個<localRepository>,此處該settings.xml檔案進行了一些其他配置)

複製程式碼

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
               
  <localRepository>D:\\develop\\mavenRepository</localRepository>
  <interactiveMode>true</interactiveMode>
  <offline>false</offline>
  <pluginGroups>
 
  </pluginGroups>
 
  <proxies>
    <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>
 
  <servers>
    <server>
      <id>deploymentRepo</id>
      <username>repouser</username>
      <password>repopwd</password>
    </server>
  </servers>
 
  <mirrors>
    <mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>
  </mirrors>
 
  <profiles>
    <profile>
      <id>jdk-1.5</id>
      <activation>
        <jdk>1.5</jdk>
      </activation>
      <repositories>
        <repository>
          <id>jdk15</id>
          <name>jdk1.5</name>
          <url>http://www.myhost.com/maven/jdk15</url>
          <layout>default</layout>
          <snapshotPolicy>always</snapshotPolicy>
        </repository>
      </repositories>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>jdk-1.5</activeProfile>
  </activeProfiles>
</settings>

複製程式碼

settings.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

用於定義一系列的遠端倉庫的映象。我們可以在pom中定義一個下載工件的時候所使用的遠端倉庫。但是有時候這個遠端倉庫會比較忙,所以這個時候人們就想著給它建立映象以緩解遠端倉庫的壓力,也就是說會把對遠端倉庫的請求轉換到對其映象地址的請求。每個遠端倉庫都會有一個id,這樣我們就可以建立自己的mirror來關聯到該倉庫,那麼以後需要從遠端倉庫下載工件的時候Maven就可以從我們定義好的mirror站點來下載,這可以很好的緩解我們遠端倉庫的壓力。在我們定義的mirror中每個遠端倉庫都只能有一個mirror與它關聯,也就是說你不能同時配置多個mirror的mirrorOf指向同一個repositoryId。

看以下是一個使用mirrors的例子:

複製程式碼

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

複製程式碼

  1> id:

  是用來區別mirror的,所有的mirror不能有相同的id

  2> mirrorOf:

   用來表示該mirror是關聯的哪一個倉庫,其值為其關聯倉庫的id。當要同時關聯多個倉庫時,這多個倉庫之間可以用逗號隔開;當要關聯所有的倉庫時,可以使用“*”表示;當要關聯除某一個倉庫以外的其他所有倉庫時,可以表示為“*,!repositoryId”;當要關聯不是localhost或用file請求的倉庫時,可以表示為“external:*”。

  3> 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。

  1> 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.4、1.5和1.6滿足;

<jdk>[1.4,1.7]</jdk>表示1.4、1.5、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

  2>file:

  表示當檔案存在或不存在的時候啟用,exists表示存在,missing表示不存在。如下面的例子表示當檔案hello/world不存在的時候啟用該profile。

複製程式碼

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

複製程式碼

  3>activeByDefault:

  當其值為true的時候表示如果沒有其他的profile處於啟用狀態的時候,該profile將自動被啟用。

  4>properties:

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

  5>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。

       6>pluginRepositories:

  在Maven中有兩種型別的倉庫,一種是儲存工件的倉庫,另一種就是儲存plugin外掛的倉庫。pluginRepositories的定義和repositories的定義類似,它表示Maven在哪些地方可以找到所需要的外掛。

9.activeProfiles

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

  <activeProfiles>
    <activeProfile>alwaysActiveProfile</activeProfile>
    <activeProfile>anotherAlwaysActiveProfile</activeProfile>
  </activeProfiles>