【maven】 maven的setting.xml文件的詳解

来源:http://www.cnblogs.com/sxdcgaq8080/archive/2016/06/15/5588070.html
-Advertisement-
Play Games

1 Maven的安裝 安裝Maven之前要確保已經安裝好了jdk,並且配置好了環境變數JAVA_HOME。具體安裝步驟如下: 經過以上幾步之後Maven就安裝成功了。接下來我們可以在命令視窗使用mvn --version來驗證一下Maven是否安裝成功。如能正確輸出Maven的安裝版本,則表示它安裝 ...


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的樣子:

 

 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                
 6   <localRepository>D:\\develop\\mavenRepository</localRepository>
 7   <interactiveMode>true</interactiveMode>
 8   <offline>false</offline>
 9   <pluginGroups>
10  
11   </pluginGroups>
12  
13   <proxies>
14     <proxy>
15       <id>optional</id>
16       <active>true</active>
17       <protocol>http</protocol>
18       <username>proxyuser</username>
19       <password>proxypass</password>
20       <host>proxy.host.net</host>
21       <port>80</port>
22       <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
23     </proxy>
24   </proxies>
25  
26   <servers>
27     <server>
28       <id>deploymentRepo</id>
29       <username>repouser</username>
30       <password>repopwd</password>
31     </server>
32   </servers>
33  
34   <mirrors>
35     <mirror>
36       <id>mirrorId</id>
37       <mirrorOf>repositoryId</mirrorOf>
38       <name>Human Readable Name for this Mirror.</name>
39       <url>http://my.repository.com/repo/path</url>
40     </mirror>
41   </mirrors>
42  
43   <profiles>
44     <profile>
45       <id>jdk-1.5</id>
46       <activation>
47         <jdk>1.5</jdk>
48       </activation>
49       <repositories>
50         <repository>
51           <id>jdk15</id>
52           <name>jdk1.5</name>
53           <url>http://www.myhost.com/maven/jdk15</url>
54           <layout>default</layout>
55           <snapshotPolicy>always</snapshotPolicy>
56         </repository>
57       </repositories>
58     </profile>
59   </profiles>
60   <activeProfiles>
61     <activeProfile>jdk-1.5</activeProfile>
62   </activeProfiles>
63 </settings>
View Code

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的代理將會被使用。下麵是一個使用代理的例子:

 

 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>
View Code

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

1   <servers>
2     <server>
3       <id>id</id>
4       <username>用戶名</username>
5       <password>密碼</password>
6     </server>
7   </servers>
View Code

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

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

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>
View Code

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

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

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

       看下麵一個例子:

 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>
View Code

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

1》  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滿足;

2》  os:表示當操作系統滿足條件的時候激活。

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

(1)下麵的示例表示當存在屬性hello的時候激活該profile。

1 <property>
2        <name>hello</name>
3 </property>
View Code

(2)下麵的示例表示當屬性hello的值為world的時候激活該profile。

1 <property>
2        <name>hello</name>
3        <value>world</value>
4 </property>
View Code

這個時候如果要激活該profile的話,可以在調用Maven指令的時候加上參數hello並指定其值為world,如:

mvn compile –Dhello=world

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

1 <profile>
2        <activation>
3               <file>
4                      <missing>hello/world</missing>
5               </file>
6        </activation>
7 </profile>
View Code

 

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

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

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

 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>
View Code

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

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

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

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

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

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

1   <activeProfiles>
2     <activeProfile>alwaysActiveProfile</activeProfile>
3     <activeProfile>anotherAlwaysActiveProfile</activeProfile>
4   </activeProfiles>
View Code

 

參考轉載:haohaoxuexi.iteye.com/blog/1827778


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 起因,由於coolpy5核心轉換到go語言開發,所以目前超人正在進行相關的技術攻關,在程式編寫方面一切都相對順利。由於coolpy5是一個真正的商業級性能的系統也考濾到coolpy之前的版本已經確定的coolpy是支持以家庭路由器為霧計算節點直接實現智能家居或智慧農業的離線解決方案,所以超人才進行了 ...
  • 文章嘗試使用噹噹開源的Sharding JDBC框架實現數據分表操作。它是直接封裝JDBC API,可以理解為增強版的JDBC驅動,舊代碼遷移成本幾乎為零。我們使用一個JPA項目的一個數據表進行了測試,確實改動量比較小。 ...
  • 聲明:本人菜鳥一枚,由於項目中需要用到zf2框架進行開發,在此記載學習使用過程中的點點滴滴。才疏學淺,請多指教。。。。。。。。。。。。。 開發過程中使用的環境及工具如下: 開發環境:LNMP: Linux+Nginx+MySQL5.5+php5.6 zf版本:zf2.2 IDE工具:NetBeans ...
  • 需求:將alv上面的數據計算到內表中區,然後通過自定義按鈕進行下載到csv格式中 附加:現在基本不用csv導出了,但是有些變態需求強行要求,也只好研究出來了,excel與txt導出很簡單,那就不多說了。 步驟: 1.copy系統標準的SAP_CONVERT_TO_CSV_FORMAT函數,此函數已經 ...
  • 事件驅動模型一般是由事件收集器、事件發送器和事件處理器三部分組成基本單元組成。 一、select庫 select庫是各個版本的linux和windows平臺都支持的基本事件驅動模型庫,並且在介面的定義上也基本相同,只是部分參數的含義略有差異。 使用select庫的一般步驟:創建所關註事件的描述集合。 ...
  • 一、多進程 多進程方式是指,伺服器在接收到一個客戶端請求時,就由伺服器主進程生成一個子進程出來和該客戶端進行交互,直到連接斷開,該子進程就結束了。 優點:設計和實現相對簡單,各個子進程之間相互獨立,處理客戶端的請求彼此不會受到干擾,並且當一個子進程產生問題時,不容易將影響蔓延到其他進程中,這保證了提 ...
  • 1.首先看一下下麵的這兩個項目,一個是新建的,一個是原來的老項目 2.myEcplise中是點擊如下圖 Maven4MyEcplise, Ecplise中也是右鍵,只不過點擊Mavene而已,兩個一樣 3. 強制更新Maven 4.一會 紅叉就消失了 ...
  • 說起迭代器,大家一定不陌生,經常使用的foreach in 這種迴圈就是,C#語言已經內置化了迭代器模式,主要是支持對非泛型集合的簡單迭代介面IEumerator和公開枚舉數IEnumerable。雖然內置了,但是這種模式也有我們學習的必要性。 代碼如下 運行結果: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...