1. 程式人生 > >Maven簡介(一)——Maven的安裝和settings.xml的配置

Maven簡介(一)——Maven的安裝和settings.xml的配置

轉載:

1       Maven的安裝

       安裝Maven之前要確保已經安裝好了jdk,並且配置好了環境變數JAVA_HOME。具體安裝步驟如下:

1.     從apache網上下載maven專案的壓縮包。下載地址為:http://maven.apache.org/download.html。比如現在最新的Maven版本是3.0.4,那麼我下載好的安裝檔案就是apache-maven-3.0.4.zip。

2.     將下載後的壓縮包解壓到Maven的安裝目錄,比如說是D:\\develop,那麼解壓後就是D:\\develop\\apache-maven-3.0.4。

3.     新增環境變數M2_HOME,其值為Maven的家目錄,如D:\\develop\\apache-maven-3.0.4。

4.     新增環境變數M2,其值將為maven安裝目錄的bin目錄,即D:\\develop\\apache-maven-3.0.4\\bin,對於windows系統也可以使用%M2_HOME%\\bin,對於linux系統也可以使用$M2_HOME/bin。

5.     將環境變數M2加入到PATH變數中,對於windows系統,可以在PATH變數的值後面加上“;%M2%”,對於linux系統,可以使用“export path=$path:$M2”

6.     還有一個可選的環境變數MAVEN_OPTS,該環境變數主要是配置Maven在使用jdk的時候指定JVM屬性的。如指定其值為“-Xms256m -Xmx512m”。

經過以上幾步之後Maven就安裝成功了。接下來我們可以在命令視窗使用mvn --version來驗證一下Maven是否安裝成功。如能正確輸出Maven的安裝版本,則表示它安裝成功了。

2       配置Maven的環境資訊

在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目錄下,然後改成自己想要的樣子。

先來看一個基本的settings.xml的樣子:

Xml程式碼  收藏程式碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"  
  3.           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.           xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">  
  5.   <localRepository>D:\\develop\\mavenRepository</localRepository>  
  6.   <interactiveMode>true</interactiveMode>  
  7.   <offline>false</offline>  
  8.   <pluginGroups>  
  9.   </pluginGroups>  
  10.   <proxies>  
  11.     <proxy>  
  12.       <id>optional</id>  
  13.       <active>true</active>  
  14.       <protocol>http</protocol>  
  15.       <username>proxyuser</username>  
  16.       <password>proxypass</password>  
  17.       <host>proxy.host.net</host>  
  18.       <port>80</port>  
  19.       <nonProxyHosts>local.net|some.host.com</nonProxyHosts>  
  20.     </proxy>  
  21.   </proxies>  
  22.   <servers>  
  23.     <server>  
  24.       <id>deploymentRepo</id>  
  25.       <username>repouser</username>  
  26.       <password>repopwd</password>  
  27.     </server>  
  28.   </servers>  
  29.   <mirrors>  
  30.     <mirror>  
  31.       <id>mirrorId</id>  
  32.       <mirrorOf>repositoryId</mirrorOf>  
  33.       <name>Human Readable Name for this Mirror.</name>  
  34.       <url>http://my.repository.com/repo/path</url>  
  35.     </mirror>  
  36.   </mirrors>  
  37.   <profiles>  
  38.     <profile>  
  39.       <id>jdk-1.5</id>  
  40.       <activation>  
  41.         <jdk>1.5</jdk>  
  42.       </activation>  
  43.       <repositories>  
  44.         <repository>  
  45.           <id>jdk15</id>  
  46.           <name>jdk1.5</name>  
  47.           <url>http://www.myhost.com/maven/jdk15</url>  
  48.           <layout>default</layout>  
  49.           <snapshotPolicy>always</snapshotPolicy>  
  50.         </repository>  
  51.       </repositories>  
  52.     </profile>  
  53.   </profiles>  
  54.   <activeProfiles>  
  55.     <activeProfile>jdk-1.5</activeProfile>  
  56.   </activeProfiles>  
  57. </settings>  

settings.xml中主要包括以下元素:

localRepository:表示Maven用來在本地儲存資訊的本地倉庫的目錄。預設是使用者家目錄下面的.m2/repository目錄。

interactiveMode:表示是否使用互動模式,預設是true;如果設為false,那麼當Maven需要使用者進行輸入的時候,它會使用一個預設值。

offline:表示是否離線,預設是false。這個屬性表示在Maven進行專案編譯和部署等操作時是否允許Maven進行聯網來下載所需要的資訊。

pluginGroups:在pluginGroups元素下面可以定義一系列的pluginGroup元素。表示當通過plugin的字首來解析plugin的時候到哪裡尋找。pluginGroup元素指定的是plugin的groupId。預設情況下,Maven會自動把org.apache.maven.plugins和org.codehaus.mojo新增到pluginGroups下。

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

Xml程式碼  收藏程式碼
  1. <proxies>  
  2.   <proxy>  
  3.       <id>xxx</id>  
  4.       <active>true</active>  
  5.       <protocol>http</protocol>  
  6.       <username>使用者名稱</username>  
  7.       <password>密碼</password>  
  8.       <host>代理伺服器地址</host>  
  9.       <port>代理伺服器的埠</port>  
  10.       <nonProxyHosts>不使用代理的主機</nonProxyHosts>  
  11.   </proxy>  
  12. </proxies>  

servers:其下面可以定義一系列的server子元素,表示當需要連線到一個遠端伺服器的時候需要使用到的驗證方式。這主要有username/password和privateKey/passphrase這兩種方式。以下是一個使用servers的示例:

Xml程式碼  收藏程式碼
  1. <servers>  
  2.   <server>  
  3.     <id>id</id>  
  4.     <username>使用者名稱</username>  
  5.     <password>密碼</password>  
  6.   </server>  
  7. </servers>  

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

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

Xml程式碼  收藏程式碼
  1. <mirrors>  
  2.     <mirror>  
  3.       <id>mirrorId</id>  
  4.       <mirrorOf>repositoryId</mirrorOf>  
  5.       <name>定義一個容易看懂的名稱 </name>  
  6.       <url>http://my.repository.com/repo/path</url>  
  7.     </mirror>  
  8. </mirrors>  

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

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

l  url:表示該映象的url。當Maven在建立系統的時候就會使用這個url來連線到我們的遠端倉庫。

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元素來指定的。

       看下面一個例子:

Xml程式碼  收藏程式碼
  1. <profiles>  
  2.   <profile>  
  3.     <id>test</id>  
  4.     <activation>  
  5.       <activeByDefault>false</activeByDefault>  
  6.       <jdk>1.6</jdk>  
  7.       <os>  
  8.         <name>Windows 7</name>  
  9.         <family>Windows</family>  
  10.         <arch>x86</arch>  
  11.         <version>5.1.2600</version>  
  12.       </os>  
  13.       <property>  
  14.         <name>mavenVersion</name>  
  15.         <value>2.0.3</value>  
  16.       </property>  
  17.       <file>  
  18.         <exists>${basedir}/file2.properties</exists>  
  19.         <missing>${basedir}/file1.properties</missing>  
  20.       </file>  
  21.     </activation>  
  22.     ...  
  23.   </profile>  
  24. </profiles>  

       在上面這段程式碼中,當所有的約束條件都滿足的時候就會啟用這個profile。

l  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滿足;

l  os:表示當作業系統滿足條件的時候啟用。

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

(1)下面的示例表示當存在屬性hello的時候啟用該profile。

Xml程式碼  收藏程式碼
  1. <property>  
  2.        <name>hello</name>  
  3. </property>  

(2)下面的示例表示當屬性hello的值為world的時候啟用該profile。

Xml程式碼  收藏程式碼
  1. <property>  
  2.        <name>hello</name>  
  3.        <value>world</value>  
  4. </property>  

這個時候如果要啟用該profile的話,可以在呼叫Maven指令的時候加上引數hello並指定其值為world,如:

mvn compile –Dhello=world

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

Xml程式碼  收藏程式碼
  1. <profile>  
  2.        <activation>  
  3.               <file>  
  4.                      <missing>hello/world</missing>  
  5.               </file>  
  6.        </activation>  
  7. </profile>  

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

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

(3)repositories:用於定義遠端倉庫的,當該profile是啟用狀態的時候,這裡面定義的遠端倉庫將作為當前pom的遠端倉庫。

Xml程式碼  收藏程式碼
  1. <repositories>  
  2.   <repository>  
  3.     <id>codehausSnapshots</id>  
  4.     <name>Codehaus Snapshots</name>  
  5.     <releases>  
  6.       <enabled>false</enabled>  
  7.       <updatePolicy>always</updatePolicy>  
  8.       <checksumPolicy>warn</checksumPolicy>  
  9.     </releases>  
  10.     <snapshots>  
  11.       <enabled>true</enabled>  
  12.       <updatePolicy>never</updatePolicy>  
  13.       <checksumPolicy>fail</checksumPolicy>  
  14.     </snapshots>  
  15.     <url>http://snapshots.maven.codehaus.org/maven2</url>  
  16.     <layout>default</layout>  
  17.   </repository>  
  18. </repositories>  

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

l  enabled:表示這個倉庫是否允許這種型別的工件

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

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

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

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

Xml程式碼  收藏程式碼
  1. <activeProfiles>  
  2.   <activeProfile>alwaysActiveProfile</activeProfile>  
  3.   <activeProfile>anotherAlwaysActiveProfile</activeProfile>  
  4. </activeProfiles>  

3.倉庫地址的修改

安裝Maven後我們會在使用者目錄下發現.m2 資料夾。預設情況下,該資料夾下放置了Maven本地倉庫.m2/repository。所有的Maven構件(artifact)都被儲存到該倉庫中,以方便重用。但是windows使用者的作業系統都安裝在C盤,把Maven倉庫放到C盤是很危險的,為此我們需要修改Maven的本地倉庫路徑。 

    修改方式如下: 

    手動建立本地倉庫的存放路徑,例如:D:\Java\m2\repository; 
    在windows的環境變數中增加了新的使用者變數M2_REPO,其對應的值為D:\Java\m2\repository(Maven倉庫的本地存放路徑),同時把這個變數增加到path變數中; 
    修改Maven安裝目錄下的 conf/資料夾內的setting.xml檔案,新增一行:<localRepository>D:\Java\m2\repository</localRepository>(表示本地倉庫的地址為:D:\Java\m2\repository);
    將上一步修改好的setting.xml檔案複製到D:\Java\m2\repository目錄下一份; 

    修改MyEclipse中Maven的配置資訊。 

    1.開啟myeclipse點選windows->preferences->maven->installations下add一個已經安裝到D:\Java目錄下的maven,如:D:\Java\maven-3.0.4,並勾選此新加項。並點選下面的browse按鈕開啟maven的全域性配置檔案,如:D:\Java\maven-3.0.4\conf\setting.xml。 

    2.開啟myeclipse點選windows->preferences->maven->User setting下修改user setting選項為:D:\Java\m2\repository\settings.xml,並點選update settings。並點選下面的reindex按鈕更新索引。 

    3.點選配置視窗的apply按鈕,突出配置視窗。 

    最後開啟CMD,執行mvn help:system會發現Maven從遠端庫下載的jar包都會放到新修改後的路徑D:\Java\m2\repository中了。