Maven詳解之倉庫------本地倉庫、遠程倉庫




Dragon's Life

堅持,完成每一個目標!

征文 | 從高考,到程序員      深度學習與TensorFlow入門一課搞定!      每周薦書 | Web掃描、HTML 5、Python(評論送書) 

Maven詳解之倉庫------本地倉庫、遠程倉庫

標簽: maven倉庫maven快照遠程倉庫本地倉庫私服 187582人閱讀 評論(31) 收藏 舉報 分類: 

在Maven中,任何一個依賴、插件或者項目構建的輸出,都可以稱之為構件。

Maven在某個統一的位置存儲所有項目的共享的構件,這個統一的位置,我們就稱之為倉庫。(倉庫就是存放依賴和插件的地方)

任何的構件都有唯一的坐標,Maven根據這個坐標定義了構件在倉庫中的唯一存儲路徑,

解讀Maven在倉庫中的存儲路徑:

1.基於groupId准備路徑,將句點分隔符轉成路徑分隔符,就是將  "."  轉換成 "/" ; example: org.testng --->org/testng

2.基於artifactId准備路徑,將artifactId連接到后面:org/testng/testng

3.使用version准備路徑,將version連接到后面:org/testng/testng/5.8

4.將artifactId於version以分隔符連字號連接到后面:org/testng/testng/5.8/tesng-5.8

5.判斷如果構件有classifier,就要在 第4項 后增加 分隔符連字號 再加上 classifier,org/testng/testng/5.8/tesng-5.8-jdk5

6.檢查構件的extension,如果extension存在,則加上句點分隔符和extension,而extension是由packing決定的,org/testng/testng/5.8/tesng-5.8-jdk5.jar

到這里我們就明白了Maven 對於構件存儲的細節。

Maven 倉庫的分類:

maven的倉庫只有兩大類:1.本地倉庫 2.遠程倉庫,在遠程倉庫中又分成了3種:2.1 中央倉庫 2.2 私服 2.3 其它公共庫

1.本地倉庫,顧名思義,就是Maven在本地存儲構件的地方。

注:maven的本地倉庫,在安裝maven后並不會創建,它是在第一次執行maven命令的時候才被創建

maven本地倉庫的默認位置:無論是Windows還是Linux,在用戶的目錄下都有一個.m2/repository/的倉庫目錄,這就是Maven倉庫的默認位置

如何更改maven默認的本地倉庫的位置:這里要引入一個新的元素:localRepository,它是存在於maven的settings.xml文件中

1.1 更改配置用戶范圍的本地倉庫:先在/.m2/目錄下創建settings.xml文件,然后在~/.m2/settings.xml,設置localRepository元素的值為想要的倉庫地址

[html] view plain copy
  1. <settings>  
  2.     <localRepository>D:\maven_new_repository</localRepository>  
  3. </settings>  
這時候,maven的本地倉庫地址就變成了 D:\maven_new_repository ,注:此時配置的maven的本地倉庫是屬於用戶范圍的。

1.2 更改配置全局范圍的本地倉庫:在M2_HOME/conf/settings.xml中更改配置,更改配置的方法同上

注:此時更改后,所有的用戶都會受到影響,而且如果maven進行升級,那么所有的配置都會被清除,所以要提前復制和備份M2_HOME/conf/settings.xml文件

故:一般情況下不推薦配置全局的settings.xml

2. 遠程倉庫

2.1 說到遠程倉庫先從 最核心的中央倉庫開始,中央倉庫是默認的遠程倉庫,maven在安裝的時候,自帶的就是中央倉庫的配置

在maven的聚合與繼承中我們說過,所有的maven項目都會繼承超級pom,具體的說,包含了下面配置的pom我們就稱之為超級pom

[html] view plain copy
  1. <repositories>  
  2.     <repository>  
  3.       <id>central</id>  
  4.       <name>Central Repository</name>  
  5.       <url>http://repo.maven.apache.org/maven2</url>  
  6.       <layout>default</layout>  
  7.       <snapshots>  
  8.         <enabled>false</enabled>  
  9.       </snapshots>  
  10.     </repository>  
  11.   </repositories>  
中央倉庫包含了絕大多數流行的開源Java構件,以及源碼、作者信息、SCM、信息、許可證信息等。一般來說,簡單的Java項目依賴的構件都可以在這里下載到

2.2 私服

私服是一種特殊的遠程倉庫,它是架設在局域網內的倉庫服務,私服代理廣域網上的遠程倉庫,供局域網內的Maven用戶使用。當Maven需要下載構件的時候,它從私服請求,如果私服上不存在該構件,則從外部的遠程倉庫下載,緩存在私服上之后,再為Maven的下載請求提供服務。我們還可以把一些無法從外部倉庫下載到的構件上傳到私服上。

Maven私服的 個特性:

1.節省自己的外網帶寬:減少重復請求造成的外網帶寬消耗

2.加速Maven構件:如果項目配置了很多外部遠程倉庫的時候,構建速度就會大大降低

3.部署第三方構件:有些構件無法從外部倉庫獲得的時候,我們可以把這些構件部署到內部倉庫(私服)中,供內部maven項目使用

4.提高穩定性,增強控制:Internet不穩定的時候,maven構建也會變的不穩定,一些私服軟件還提供了其他的功能

5.降低中央倉庫的負荷:maven中央倉庫被請求的數量是巨大的,配置私服也可以大大降低中央倉庫的壓力

當前主流的maven私服:

1.Apache的Archiva

2.JFrog的Artifactory

3.Sonatype的Nexus

三、遠程倉庫配置

配置遠程倉庫將引入新的配置元素:<repositories>     <repository>

<repositories>元素下,可以使用  <repository>子元素聲明一個或者多個遠程倉庫。

例子:

[html] view plain copy
  1. <repositories>  
  2.         <repository>  
  3.             <id>jboss</id>  
  4.             <name>JBoss Repository</name>  
  5.             <url>http://repository.jboss.com/maven2/</url>  
  6.             <releases>  
  7.                 <updatePolicy>daily</updatePolicy><!-- never,always,interval n -->  
  8.                 <enabled>true</enabled>  
  9.                 <checksumPolicy>warn</checksumPolicy><!-- fail,ignore -->  
  10.             </releases>  
  11.             <snapshots>  
  12.                 <enabled>false</enabled>  
  13.             </snapshots>  
  14.             <layout>default</layout>  
  15.         </repository>  
  16.     </repositories>  
<updatePolicy>元素:表示更新的頻率,值有:never, always,interval,daily, daily 為默認值

<checksumPolicy>元素:表示maven檢查和檢驗文件的策略,warn為默認值

出於安全方面的考慮,有時我們要對遠程倉庫的訪問進行認證,一般將認證信息配置在settings.xml中:

[html] view plain copy
  1. <span style="white-space:pre">    </span><servers>  
  2.         <server>  
  3.             <id>same with repository id in pom</id>  
  4.             <username>username</username>  
  5.             <password>pwd</password>  
  6.         </server>  
  7.     </servers>  
注:這里的id必須與POM中需要認證的repository元素的Id一致。


如何將生成的項目部署到遠程倉庫

完成這項工作,也需要在POM中進行配置,這里有新引入了一個元素:<distributionManagement>

distributionManagement包含了2個子元素:repository和snapshotRepository, 前者表示發布版本構件的倉庫,后者表示快照版本的倉庫

這兩個元素都需要配置 id(該遠程倉庫的唯一標識),name,url(表示該倉庫的地址)

向遠程倉庫中部署構件,需要進行認證。配置同上

配置正確后運行: mvn clean deploy

正確的看待快照

之前我們在配置pom的時候,對於快照的配置都很謹慎,或者說很少用快照的版本,原因是它還很不穩定,極容易給我們的系統帶來未知的錯誤,讓我們很難查找。其實快照版本也並不是一無是處,快照最大的用途是用在開發的過程中,尤其是有模塊依賴的時候,比如說AB兩個模塊同時開發,A依賴於B,開發過程中AB都是持續集成的開發,不斷的修改POM文件和構建工程,這時候版本同步就成了一個很大的問題。使用快照就可以達到這一目的。

其實在快照版本在發布的過程中,Maven會自動為構件以當前時間戳做標記,有了這個時間戳,我們就可以隨時找到最新的快照版本,這樣也就解決剛才說的 協作開發的問題。

至於A如何檢查B的更新,剛剛在講配置的時候說過,快照配置中有一個元素可以控制檢查更新的頻率------updatePolicy

我們也可以使用命令行加參數的形式強制執行讓maven檢查更新:

mvn clean install-U


maven到底是如何從倉庫中解析構件的呢?----maven從倉庫解析依賴的機制

1. 當依賴的范圍是system的時候,Maven直接從本地文件系統解析構件

2. 根據依賴坐標計算倉庫路徑后,嘗試直接從本地倉庫尋找構件,如果發現相應構件,則解析成功

3. 在本地倉庫不存在相應的構件情況下,如果依賴的版本是顯示的發布版本構件,則遍歷所有的遠程倉庫,發現后下載使用

4. 如果依賴的版本是RELEASE或LATEST, 則基於更新策略讀取所有遠程倉庫的元數據,將其於本地倉庫的對應元數據合並后,計算出RELEASE或者LATEST的真實值,然后基於這個真實值檢查本地倉庫

5. 如果依賴的版本是SNAPSHOT, 則基於更新策略讀取所有遠程倉庫的元數據, 將其與本地倉庫的對應元數據合並后,得到最新快照版本的值,然后基於該值檢查本地倉庫或從遠程倉庫下載

6. 如果最后解析到的構件版本是時間戳格式的快照,則復制其時間戳格式的文件 至 非時間戳格式,並使用該非時間戳格式的構件

注:一定要記得<release>  <enabled>     &    <snapshot>  <enabled> ,對於快照也是一樣

在POM的依賴聲明的時候不推薦使用LATEST & RELEASE, 在Maven3中也不再支持在插件配置中使用LATEST & RELEASE, 如果不設置插件版本,那么最終版本和release一樣,

maven只會解析最新的發布版本構建。

鏡像





不想愛了就放手,不想講了就閉嘴,不想恨了就釋懷。

感悟——一切都會過去的,事事不必太執着。

60
 
5
  

  相關文章推薦
猜你在找
深度學習基礎與TensorFlow實踐
【在線峰會】前端開發重點難點技術剖析與創新實踐
【在線峰會】一天掌握物聯網全棧開發之道
【在線峰會】如何高質高效的進行Android技術開發
機器學習40天精英計划
Python數據挖掘與分析速成班
微信小程序開發實戰
JFinal極速開發企業實戰
備戰2017軟考 系統集成項目管理工程師 學習套餐
Python大型網絡爬蟲項目開發實戰(全套)
查看評論
19樓  d1249393122017-04-24 22:04發表 [回復]
多謝分享
18樓  咖喱土豆和雞塊2017-04-22 09:02發表 [回復]
博主,請問,現在我的maven只能夠從我的私服上面去下載jar包,但是私服上有些我需要的jar包是沒有的,發現現在不能從遠程的中央倉庫去下載jar包,請問是為什么?如下是我的setting.xml文件,剛才看文章,樓主說在pom中繼承超級Pom文件,是在超級pom中設置maven中央倉庫嗎?
Re:  咖喱土豆和雞塊2017-04-22 09:06發表 [回復]
回復咖喱土豆和雞塊:這個setting超過字節,反着看。
Re:  咖喱土豆和雞塊2017-04-22 09:06發表 [回復]
[html] view plain copy
  1. <!-- 配置eclipse插件 -->  
  2.     <pluginGroups>  
  3.         <pluginGroup>org.mortbay.jetty</pluginGroup>      
  4.         <pluginGroup>org.codehaus.cargo</pluginGroup>  
  5.         <pluginGroup>org.jvnet.hudson.tools</pluginGroup>  
  6.     </pluginGroups>  
  7. </settings>  
Re:  咖喱土豆和雞塊2017-04-22 09:05發表 [回復]
[html] view plain copy
  1. <!-- 設置 maven 的遠程倉庫為 nexus -->  
  2.     <mirrors>  
  3.         <mirror>  
  4.             <id>nexus</id>  
  5.             <mirrorOf>central</mirrorOf>  
  6.             <name>nexus repository</name>  
  7.             <url>http://192.168.22.223:8081/nexus/content/groups/dynamic-public121</url>  
  8.         </mirror>  
  9.     </mirrors>  
  10.   
  11.     <!-- 設置 central 的路徑等,覆蓋了maven module builder里面的central配置 -->  
  12.     <profiles>  
  13.         <profile>  
  14.             <id>central</id>  
  15.             <repositories>  
  16.                 <repository>  
  17.                     <id>central</id>  
  18.                     <name>Central</name>  
  19.                     <url>http://192.168.22.223:8081/nexus/content/groups/dynamic-public111</url>  
  20.                 </repository>  
  21.             </repositories>  
  22.             <pluginRepositories>  
  23.                 <pluginRepository>  
  24.                     <id>central</id>  
  25.                     <name>Central</name>  
  26.                     <url>http://192.168.22.234:8081/nexus/content/groups/dynamic-public123</url>  
  27.                 </pluginRepository>  
  28.             </pluginRepositories>  
  29.         </profile>   
  30.     </profiles>  
  31.     <activeProfiles>   
  32.         <activeProfile>central</activeProfile>  
  33.     </activeProfiles>  
  34.   
  35.       
Re:  咖喱土豆和雞塊2017-04-22 09:05發表 [回復]
[html] view plain copy
  1. <server>  
  2.             <id>dynamic-snapshots</id>  
  3.             <username>admin</username>  
  4.             <password>***</password>  
  5.         </server>       
  6.     </servers>  
  7.   
  8.       
Re:  咖喱土豆和雞塊2017-04-22 09:04發表 [回復]
[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>  
  2. <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">  
  3.   
  4.     <!-- 設置本地倉庫路徑 -->  
  5.     <localRepository>D:\Maven\repository</localRepository>  
  6.   
  7.     <!-- 設置發布 jar 包時的用戶名及密 -->  
  8.     <servers>  
  9.         <server>  
  10.             <id>releases</id>  
  11.             <username>admin</username>  
  12.             <password>***</password>  
  13.         </server>  
  14.   
  15.           
17樓  雪吖頭2017-03-14 15:46發表 [回復]
非常有幫助;
16樓  何紅霞2017-02-24 14:39發表 [回復]
今天在使用maven的時候,遇到了幾個問題,看博主的文章,理解了基本概念,解決了問題,多謝
15樓  王虹芸2017-02-24 14:37發表 [回復]
謝謝博主分享,清楚多了。
14樓  12期-王嘯2017-02-22 15:59發表 [回復]
急求如何把maven庫綁定到JBOSS eap 服務器中
13樓  栗振娟2017-02-09 17:58發表 [回復]
解析的很好,多謝分享。
12樓  haozaiba2016-12-16 08:49發表 [回復]
·您好,如果我想實現自己的parent,該如何寫啊,能否指教一下?
Re:  桐桐-Dragon2016-12-19 10:24發表 [回復]
回復haozaiba:先寫自己的parent,然后讓其余的模塊繼承parent即可.
在parent聲明各種需要的依賴、插件等。
11樓  happyljw2016-10-12 10:11發表 [回復]
學習中受教了,樓主我能轉載嗎?
Re:  桐桐-Dragon2016-11-04 15:34發表 [回復]
回復happyljw:可以哦~
10樓  yuanlin_work2016-08-11 11:40發表 [回復]
受教了,多謝
9樓  Man-YB2016-05-11 14:13發表 [回復]
遠程倉庫的配置那里不清楚是把配置文件寫在pom.xml還是在settings.xml里面.
Re:  一個X號的QB2016-07-13 16:38發表 [回復]
回復Man-YB:肯定是寫在Maven的setting.xml中
8樓  Man-YB2016-05-11 14:10發表 [回復]
中央倉庫的路徑能修改嗎,在哪兒修改.
Re:  楊萬2016-09-26 15:32發表 [回復]
回復Man-YB:可以通過鏡像進行覆蓋
7樓  im54372016-04-14 21:46發表 [回復]
學習了
6樓  Shao_win2016-03-17 13:46發表 [回復]
想問一下更新了maven遠程倉庫對項目有沒有影響的,為什么更新完遠程倉庫之后運行項目就說maven插件版本沒有了呢
Re:  桐桐-Dragon2016-03-17 15:40發表 [回復]
回復Shao_win:1. 本地 2.局域網(企業內部) 3.maven center 
你只能更新 1和2的,1就是你本地代碼的,你可以先看一下,你本地倉庫有沒有了。。
你可以登陸到2的服務器上看一下,到底有沒有對應的版本,



建議你先update一下你的工程再進行上面的檢查。。。因為如果是之前有,除非人為刪除,否則都應該是你工程的問題。
Re:  Shao_win2016-03-31 23:56發表 [回復]
回復桐桐-Dragon:謝謝回答,問題解決了,不是我所說的原因,這方面還有待學習,謝謝
5樓  七零五七2016-03-06 14:31發表 [回復]
有沒有這種情況,我pom中配置兩個類似的遠程倉庫,那這兩個倉庫優先級誰高
4樓  七零五七2016-03-06 14:29發表 [回復]
是不是maven實戰的總結
3樓  實體笑2015-12-31 10:24發表 [回復]
拜讀中。。
2樓  qq_238655332015-11-09 09:38發表 [回復]
請問下,如果pom.xml中配置了遠程倉庫,setting中也配置了遠程倉庫,構建項目的時候會先走哪個?如何配置不讓先走setting的?
Re:  桐桐-Dragon2015-11-17 17:12發表 [回復]
回復qq_23865533:你的問題你都已經回答了。。。
這個確實是有個優先級的,應該是pom>用戶級別>全局級別,
例:如果pom中不配置,就取用戶級別,
1樓  gudanhao2015-07-27 17:37發表 [回復]
學習中,非常有用,謝謝
發表評論
  • 用 戶 名:
  • cmq591117730
  • 評論內容:
  • 插入代碼
      
* 以上用戶言論只代表其個人觀點,不代表CSDN網站的觀點或立場
    個人資料
     
    桐桐-Dragon
      3
    • 訪問:725998次
    • 積分:4883
    • 等級: 
    • 排名:第5408名
    • 原創:78篇
    • 轉載:3篇
    • 譯文:1篇
    • 評論:114條
    博客專欄
    文章搜索
    文章分類
    文章存檔
    閱讀排行
    評論排行
    推薦文章
    最新評論
<iframe id="iframeu2734133_0" src="http://pos.baidu.com/vcdm?rdid=2734133&amp;dc=3&amp;di=u2734133&amp;dri=0&amp;dis=0&amp;dai=5&amp;ps=4098x128&amp;dcb=___adblockplus&amp;dtm=HTML_POST&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1497532335465&amp;ti=Maven%E8%AF%A6%E8%A7%A3%E4%B9%8B%E4%BB%93%E5%BA%93------%E6%9C%AC%E5%9C%B0%E4%BB%93%E5%BA%93%E3%80%81%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%20-%20Dragon%27s%20Life%20-%20%E5%8D%9A%E5%AE%A2%E9%A2%91%E9%81%93%20-%20CSDN.NET&amp;ari=2&amp;dbv=2&amp;drs=1&amp;pcs=1522x779&amp;pss=1522x7375&amp;cfv=0&amp;cpl=4&amp;chi=1&amp;cce=true&amp;cec=UTF-8&amp;tlm=1497532335&amp;rw=779&amp;ltu=http%3A%2F%2Fblog.csdn.net%2Fwanghantong%2Farticle%2Fdetails%2F36427433&amp;ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DgK1xLbQB0taWzjY_CO1oYF_R6bOBoYcKyAyDyjO0Xm-eEScoXlR-uHdrn4jutHHVscPvcD4zUAR60VBSOe1sFRQuAU_YpG8Rjf-T8gfkBl3%26wd%3D%26eqid%3Df49a66d3003da5fd00000005594287bd&amp;ecd=1&amp;uc=1920x1040&amp;pis=-1x-1&amp;sr=1920x1080&amp;tcn=1497532336&amp;qn=d901b727dca97c64&amp;tt=1497532335423.554.554.555" width="250" height="250" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px; width: 250px; height: 250px;"></iframe>
公司簡介 | 招賢納士 | 廣告服務 | 聯系方式 | 版權聲明 | 法律顧問 | 問題報告 | 合作伙伴 | 論壇反饋
網站客服 雜志客服 微博客服 400-660-0108 | 北京創新樂知信息技術有限公司 版權所有 | 江蘇知之為計算機有限公司 | 江蘇樂知網絡技術有限公司

Dragon's Life

堅持,完成每一個目標!

征文 | 從高考,到程序員      深度學習與TensorFlow入門一課搞定!      每周薦書 | Web掃描、HTML 5、Python(評論送書) 

Maven詳解之倉庫------本地倉庫、遠程倉庫

標簽: maven倉庫maven快照遠程倉庫本地倉庫私服 187582人閱讀 評論(31) 收藏 舉報 分類: 

在Maven中,任何一個依賴、插件或者項目構建的輸出,都可以稱之為構件。

Maven在某個統一的位置存儲所有項目的共享的構件,這個統一的位置,我們就稱之為倉庫。(倉庫就是存放依賴和插件的地方)

任何的構件都有唯一的坐標,Maven根據這個坐標定義了構件在倉庫中的唯一存儲路徑,

解讀Maven在倉庫中的存儲路徑:

1.基於groupId准備路徑,將句點分隔符轉成路徑分隔符,就是將  "."  轉換成 "/" ; example: org.testng --->org/testng

2.基於artifactId准備路徑,將artifactId連接到后面:org/testng/testng

3.使用version准備路徑,將version連接到后面:org/testng/testng/5.8

4.將artifactId於version以分隔符連字號連接到后面:org/testng/testng/5.8/tesng-5.8

5.判斷如果構件有classifier,就要在 第4項 后增加 分隔符連字號 再加上 classifier,org/testng/testng/5.8/tesng-5.8-jdk5

6.檢查構件的extension,如果extension存在,則加上句點分隔符和extension,而extension是由packing決定的,org/testng/testng/5.8/tesng-5.8-jdk5.jar

到這里我們就明白了Maven 對於構件存儲的細節。

Maven 倉庫的分類:

maven的倉庫只有兩大類:1.本地倉庫 2.遠程倉庫,在遠程倉庫中又分成了3種:2.1 中央倉庫 2.2 私服 2.3 其它公共庫

1.本地倉庫,顧名思義,就是Maven在本地存儲構件的地方。

注:maven的本地倉庫,在安裝maven后並不會創建,它是在第一次執行maven命令的時候才被創建

maven本地倉庫的默認位置:無論是Windows還是Linux,在用戶的目錄下都有一個.m2/repository/的倉庫目錄,這就是Maven倉庫的默認位置

如何更改maven默認的本地倉庫的位置:這里要引入一個新的元素:localRepository,它是存在於maven的settings.xml文件中

1.1 更改配置用戶范圍的本地倉庫:先在/.m2/目錄下創建settings.xml文件,然后在~/.m2/settings.xml,設置localRepository元素的值為想要的倉庫地址

[html] view plain copy
  1. <settings>  
  2.     <localRepository>D:\maven_new_repository</localRepository>  
  3. </settings>  
這時候,maven的本地倉庫地址就變成了 D:\maven_new_repository ,注:此時配置的maven的本地倉庫是屬於用戶范圍的。

1.2 更改配置全局范圍的本地倉庫:在M2_HOME/conf/settings.xml中更改配置,更改配置的方法同上

注:此時更改后,所有的用戶都會受到影響,而且如果maven進行升級,那么所有的配置都會被清除,所以要提前復制和備份M2_HOME/conf/settings.xml文件

故:一般情況下不推薦配置全局的settings.xml

2. 遠程倉庫

2.1 說到遠程倉庫先從 最核心的中央倉庫開始,中央倉庫是默認的遠程倉庫,maven在安裝的時候,自帶的就是中央倉庫的配置

在maven的聚合與繼承中我們說過,所有的maven項目都會繼承超級pom,具體的說,包含了下面配置的pom我們就稱之為超級pom

[html] view plain copy
  1. <repositories>  
  2.     <repository>  
  3.       <id>central</id>  
  4.       <name>Central Repository</name>  
  5.       <url>http://repo.maven.apache.org/maven2</url>  
  6.       <layout>default</layout>  
  7.       <snapshots>  
  8.         <enabled>false</enabled>  
  9.       </snapshots>  
  10.     </repository>  
  11.   </repositories>  
中央倉庫包含了絕大多數流行的開源Java構件,以及源碼、作者信息、SCM、信息、許可證信息等。一般來說,簡單的Java項目依賴的構件都可以在這里下載到

2.2 私服

私服是一種特殊的遠程倉庫,它是架設在局域網內的倉庫服務,私服代理廣域網上的遠程倉庫,供局域網內的Maven用戶使用。當Maven需要下載構件的時候,它從私服請求,如果私服上不存在該構件,則從外部的遠程倉庫下載,緩存在私服上之后,再為Maven的下載請求提供服務。我們還可以把一些無法從外部倉庫下載到的構件上傳到私服上。

Maven私服的 個特性:

1.節省自己的外網帶寬:減少重復請求造成的外網帶寬消耗

2.加速Maven構件:如果項目配置了很多外部遠程倉庫的時候,構建速度就會大大降低

3.部署第三方構件:有些構件無法從外部倉庫獲得的時候,我們可以把這些構件部署到內部倉庫(私服)中,供內部maven項目使用

4.提高穩定性,增強控制:Internet不穩定的時候,maven構建也會變的不穩定,一些私服軟件還提供了其他的功能

5.降低中央倉庫的負荷:maven中央倉庫被請求的數量是巨大的,配置私服也可以大大降低中央倉庫的壓力

當前主流的maven私服:

1.Apache的Archiva

2.JFrog的Artifactory

3.Sonatype的Nexus

三、遠程倉庫配置

配置遠程倉庫將引入新的配置元素:<repositories>     <repository>

<repositories>元素下,可以使用  <repository>子元素聲明一個或者多個遠程倉庫。

例子:

[html] view plain copy
  1. <repositories>  
  2.         <repository>  
  3.             <id>jboss</id>  
  4.             <name>JBoss Repository</name>  
  5.             <url>http://repository.jboss.com/maven2/</url>  
  6.             <releases>  
  7.                 <updatePolicy>daily</updatePolicy><!-- never,always,interval n -->  
  8.                 <enabled>true</enabled>  
  9.                 <checksumPolicy>warn</checksumPolicy><!-- fail,ignore -->  
  10.             </releases>  
  11.             <snapshots>  
  12.                 <enabled>false</enabled>  
  13.             </snapshots>  
  14.             <layout>default</layout>  
  15.         </repository>  
  16.     </repositories>  
<updatePolicy>元素:表示更新的頻率,值有:never, always,interval,daily, daily 為默認值

<checksumPolicy>元素:表示maven檢查和檢驗文件的策略,warn為默認值

出於安全方面的考慮,有時我們要對遠程倉庫的訪問進行認證,一般將認證信息配置在settings.xml中:

[html] view plain copy
  1. <span style="white-space:pre">    </span><servers>  
  2.         <server>  
  3.             <id>same with repository id in pom</id>  
  4.             <username>username</username>  
  5.             <password>pwd</password>  
  6.         </server>  
  7.     </servers>  
注:這里的id必須與POM中需要認證的repository元素的Id一致。


如何將生成的項目部署到遠程倉庫

完成這項工作,也需要在POM中進行配置,這里有新引入了一個元素:<distributionManagement>

distributionManagement包含了2個子元素:repository和snapshotRepository, 前者表示發布版本構件的倉庫,后者表示快照版本的倉庫

這兩個元素都需要配置 id(該遠程倉庫的唯一標識),name,url(表示該倉庫的地址)

向遠程倉庫中部署構件,需要進行認證。配置同上

配置正確后運行: mvn clean deploy

正確的看待快照

之前我們在配置pom的時候,對於快照的配置都很謹慎,或者說很少用快照的版本,原因是它還很不穩定,極容易給我們的系統帶來未知的錯誤,讓我們很難查找。其實快照版本也並不是一無是處,快照最大的用途是用在開發的過程中,尤其是有模塊依賴的時候,比如說AB兩個模塊同時開發,A依賴於B,開發過程中AB都是持續集成的開發,不斷的修改POM文件和構建工程,這時候版本同步就成了一個很大的問題。使用快照就可以達到這一目的。

其實在快照版本在發布的過程中,Maven會自動為構件以當前時間戳做標記,有了這個時間戳,我們就可以隨時找到最新的快照版本,這樣也就解決剛才說的 協作開發的問題。

至於A如何檢查B的更新,剛剛在講配置的時候說過,快照配置中有一個元素可以控制檢查更新的頻率------updatePolicy

我們也可以使用命令行加參數的形式強制執行讓maven檢查更新:

mvn clean install-U


maven到底是如何從倉庫中解析構件的呢?----maven從倉庫解析依賴的機制

1. 當依賴的范圍是system的時候,Maven直接從本地文件系統解析構件

2. 根據依賴坐標計算倉庫路徑后,嘗試直接從本地倉庫尋找構件,如果發現相應構件,則解析成功

3. 在本地倉庫不存在相應的構件情況下,如果依賴的版本是顯示的發布版本構件,則遍歷所有的遠程倉庫,發現后下載使用

4. 如果依賴的版本是RELEASE或LATEST, 則基於更新策略讀取所有遠程倉庫的元數據,將其於本地倉庫的對應元數據合並后,計算出RELEASE或者LATEST的真實值,然后基於這個真實值檢查本地倉庫

5. 如果依賴的版本是SNAPSHOT, 則基於更新策略讀取所有遠程倉庫的元數據, 將其與本地倉庫的對應元數據合並后,得到最新快照版本的值,然后基於該值檢查本地倉庫或從遠程倉庫下載

6. 如果最后解析到的構件版本是時間戳格式的快照,則復制其時間戳格式的文件 至 非時間戳格式,並使用該非時間戳格式的構件

注:一定要記得<release>  <enabled>     &    <snapshot>  <enabled> ,對於快照也是一樣

在POM的依賴聲明的時候不推薦使用LATEST & RELEASE, 在Maven3中也不再支持在插件配置中使用LATEST & RELEASE, 如果不設置插件版本,那么最終版本和release一樣,

maven只會解析最新的發布版本構建。

鏡像





不想愛了就放手,不想講了就閉嘴,不想恨了就釋懷。

感悟——一切都會過去的,事事不必太執着。

60
 
5
  

  相關文章推薦
<iframe id="iframeu2998112_0" src="http://pos.baidu.com/vcdm?rdid=2998112&amp;dc=3&amp;di=u2998112&amp;dri=0&amp;dis=0&amp;dai=3&amp;ps=6823x403&amp;dcb=___adblockplus&amp;dtm=HTML_POST&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1497532335465&amp;ti=Maven%E8%AF%A6%E8%A7%A3%E4%B9%8B%E4%BB%93%E5%BA%93------%E6%9C%AC%E5%9C%B0%E4%BB%93%E5%BA%93%E3%80%81%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%20-%20Dragon%27s%20Life%20-%20%E5%8D%9A%E5%AE%A2%E9%A2%91%E9%81%93%20-%20CSDN.NET&amp;ari=2&amp;dbv=2&amp;drs=1&amp;pcs=1522x779&amp;pss=1522x6864&amp;cfv=0&amp;cpl=4&amp;chi=1&amp;cce=true&amp;cec=UTF-8&amp;tlm=1497532335&amp;rw=779&amp;ltu=http%3A%2F%2Fblog.csdn.net%2Fwanghantong%2Farticle%2Fdetails%2F36427433&amp;ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DgK1xLbQB0taWzjY_CO1oYF_R6bOBoYcKyAyDyjO0Xm-eEScoXlR-uHdrn4jutHHVscPvcD4zUAR60VBSOe1sFRQuAU_YpG8Rjf-T8gfkBl3%26wd%3D%26eqid%3Df49a66d3003da5fd00000005594287bd&amp;ecd=1&amp;uc=1920x1040&amp;pis=-1x-1&amp;sr=1920x1080&amp;tcn=1497532336&amp;qn=571197de89ad7099&amp;tt=1497532335423.393.393.393" width="960" height="90" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px; width: 960px; height: 90px;"></iframe>
猜你在找
深度學習基礎與TensorFlow實踐
【在線峰會】前端開發重點難點技術剖析與創新實踐
【在線峰會】一天掌握物聯網全棧開發之道
【在線峰會】如何高質高效的進行Android技術開發
機器學習40天精英計划
Python數據挖掘與分析速成班
微信小程序開發實戰
JFinal極速開發企業實戰
備戰2017軟考 系統集成項目管理工程師 學習套餐
Python大型網絡爬蟲項目開發實戰(全套)
<iframe id="iframeu2831143_0" src="http://pos.baidu.com/vcdm?rdid=2831143&amp;dc=3&amp;di=u2831143&amp;dri=0&amp;dis=0&amp;dai=4&amp;ps=7115x433&amp;dcb=___adblockplus&amp;dtm=HTML_POST&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1497532335465&amp;ti=Maven%E8%AF%A6%E8%A7%A3%E4%B9%8B%E4%BB%93%E5%BA%93------%E6%9C%AC%E5%9C%B0%E4%BB%93%E5%BA%93%E3%80%81%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%20-%20Dragon%27s%20Life%20-%20%E5%8D%9A%E5%AE%A2%E9%A2%91%E9%81%93%20-%20CSDN.NET&amp;ari=2&amp;dbv=2&amp;drs=1&amp;pcs=1522x779&amp;pss=1522x7270&amp;cfv=0&amp;cpl=4&amp;chi=1&amp;cce=true&amp;cec=UTF-8&amp;tlm=1497532335&amp;rw=779&amp;ltu=http%3A%2F%2Fblog.csdn.net%2Fwanghantong%2Farticle%2Fdetails%2F36427433&amp;ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DgK1xLbQB0taWzjY_CO1oYF_R6bOBoYcKyAyDyjO0Xm-eEScoXlR-uHdrn4jutHHVscPvcD4zUAR60VBSOe1sFRQuAU_YpG8Rjf-T8gfkBl3%26wd%3D%26eqid%3Df49a66d3003da5fd00000005594287bd&amp;ecd=1&amp;uc=1920x1040&amp;pis=-1x-1&amp;sr=1920x1080&amp;tcn=1497532336&amp;qn=869780475326cc51&amp;tt=1497532335423.442.587.588" width="960" height="90" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px; width: 960px; height: 90px;"></iframe>查看評論
19樓  d1249393122017-04-24 22:04發表 [回復]
多謝分享
18樓  咖喱土豆和雞塊2017-04-22 09:02發表 [回復]
博主,請問,現在我的maven只能夠從我的私服上面去下載jar包,但是私服上有些我需要的jar包是沒有的,發現現在不能從遠程的中央倉庫去下載jar包,請問是為什么?如下是我的setting.xml文件,剛才看文章,樓主說在pom中繼承超級Pom文件,是在超級pom中設置maven中央倉庫嗎?
Re:  咖喱土豆和雞塊2017-04-22 09:06發表 [回復]
回復咖喱土豆和雞塊:這個setting超過字節,反着看。
Re:  咖喱土豆和雞塊2017-04-22 09:06發表 [回復]
[html] view plain copy
  1. <!-- 配置eclipse插件 -->  
  2.     <pluginGroups>  
  3.         <pluginGroup>org.mortbay.jetty</pluginGroup>      
  4.         <pluginGroup>org.codehaus.cargo</pluginGroup>  
  5.         <pluginGroup>org.jvnet.hudson.tools</pluginGroup>  
  6.     </pluginGroups>  
  7. </settings>  
Re:  咖喱土豆和雞塊2017-04-22 09:05發表 [回復]
[html] view plain copy
  1. <!-- 設置 maven 的遠程倉庫為 nexus -->  
  2.     <mirrors>  
  3.         <mirror>  
  4.             <id>nexus</id>  
  5.             <mirrorOf>central</mirrorOf>  
  6.             <name>nexus repository</name>  
  7.             <url>http://192.168.22.223:8081/nexus/content/groups/dynamic-public121</url>  
  8.         </mirror>  
  9.     </mirrors>  
  10.   
  11.     <!-- 設置 central 的路徑等,覆蓋了maven module builder里面的central配置 -->  
  12.     <profiles>  
  13.         <profile>  
  14.             <id>central</id>  
  15.             <repositories>  
  16.                 <repository>  
  17.                     <id>central</id>  
  18.                     <name>Central</name>  
  19.                     <url>http://192.168.22.223:8081/nexus/content/groups/dynamic-public111</url>  
  20.                 </repository>  
  21.             </repositories>  
  22.             <pluginRepositories>  
  23.                 <pluginRepository>  
  24.                     <id>central</id>  
  25.                     <name>Central</name>  
  26.                     <url>http://192.168.22.234:8081/nexus/content/groups/dynamic-public123</url>  
  27.                 </pluginRepository>  
  28.             </pluginRepositories>  
  29.         </profile>   
  30.     </profiles>  
  31.     <activeProfiles>   
  32.         <activeProfile>central</activeProfile>  
  33.     </activeProfiles>  
  34.   
  35.       
Re:  咖喱土豆和雞塊2017-04-22 09:05發表 [回復]
[html] view plain copy
  1. <server>  
  2.             <id>dynamic-snapshots</id>  
  3.             <username>admin</username>  
  4.             <password>***</password>  
  5.         </server>       
  6.     </servers>  
  7.   
  8.       
Re:  咖喱土豆和雞塊2017-04-22 09:04發表 [回復]
[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>  
  2. <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">  
  3.   
  4.     <!-- 設置本地倉庫路徑 -->  
  5.     <localRepository>D:\Maven\repository</localRepository>  
  6.   
  7.     <!-- 設置發布 jar 包時的用戶名及密 -->  
  8.     <servers>  
  9.         <server>  
  10.             <id>releases</id>  
  11.             <username>admin</username>  
  12.             <password>***</password>  
  13.         </server>  
  14.   
  15.           
17樓  雪吖頭2017-03-14 15:46發表 [回復]
非常有幫助;
16樓  何紅霞2017-02-24 14:39發表 [回復]
今天在使用maven的時候,遇到了幾個問題,看博主的文章,理解了基本概念,解決了問題,多謝
15樓  王虹芸2017-02-24 14:37發表 [回復]
謝謝博主分享,清楚多了。
14樓  12期-王嘯2017-02-22 15:59發表 [回復]
急求如何把maven庫綁定到JBOSS eap 服務器中
13樓  栗振娟2017-02-09 17:58發表 [回復]
解析的很好,多謝分享。
12樓  haozaiba2016-12-16 08:49發表 [回復]
·您好,如果我想實現自己的parent,該如何寫啊,能否指教一下?
Re:  桐桐-Dragon2016-12-19 10:24發表 [回復]
回復haozaiba:先寫自己的parent,然后讓其余的模塊繼承parent即可.
在parent聲明各種需要的依賴、插件等。
11樓  happyljw2016-10-12 10:11發表 [回復]
學習中受教了,樓主我能轉載嗎?
Re:  桐桐-Dragon2016-11-04 15:34發表 [回復]
回復happyljw:可以哦~
10樓  yuanlin_work2016-08-11 11:40發表 [回復]
受教了,多謝
9樓  Man-YB2016-05-11 14:13發表 [回復]
遠程倉庫的配置那里不清楚是把配置文件寫在pom.xml還是在settings.xml里面.
Re:  一個X號的QB2016-07-13 16:38發表 [回復]
回復Man-YB:肯定是寫在Maven的setting.xml中
8樓  Man-YB2016-05-11 14:10發表 [回復]
中央倉庫的路徑能修改嗎,在哪兒修改.
Re:  楊萬2016-09-26 15:32發表 [回復]
回復Man-YB:可以通過鏡像進行覆蓋
7樓  im54372016-04-14 21:46發表 [回復]
學習了
6樓  Shao_win2016-03-17 13:46發表 [回復]
想問一下更新了maven遠程倉庫對項目有沒有影響的,為什么更新完遠程倉庫之后運行項目就說maven插件版本沒有了呢
Re:  桐桐-Dragon2016-03-17 15:40發表 [回復]
回復Shao_win:1. 本地 2.局域網(企業內部) 3.maven center 
你只能更新 1和2的,1就是你本地代碼的,你可以先看一下,你本地倉庫有沒有了。。
你可以登陸到2的服務器上看一下,到底有沒有對應的版本,



建議你先update一下你的工程再進行上面的檢查。。。因為如果是之前有,除非人為刪除,否則都應該是你工程的問題。
Re:  Shao_win2016-03-31 23:56發表 [回復]
回復桐桐-Dragon:謝謝回答,問題解決了,不是我所說的原因,這方面還有待學習,謝謝
5樓  七零五七2016-03-06 14:31發表 [回復]
有沒有這種情況,我pom中配置兩個類似的遠程倉庫,那這兩個倉庫優先級誰高
4樓  七零五七2016-03-06 14:29發表 [回復]
是不是maven實戰的總結
3樓  實體笑2015-12-31 10:24發表 [回復]
拜讀中。。
2樓  qq_238655332015-11-09 09:38發表 [回復]
請問下,如果pom.xml中配置了遠程倉庫,setting中也配置了遠程倉庫,構建項目的時候會先走哪個?如何配置不讓先走setting的?
Re:  桐桐-Dragon2015-11-17 17:12發表 [回復]
回復qq_23865533:你的問題你都已經回答了。。。
這個確實是有個優先級的,應該是pom>用戶級別>全局級別,
例:如果pom中不配置,就取用戶級別,
1樓  gudanhao2015-07-27 17:37發表 [回復]
學習中,非常有用,謝謝
發表評論
  • 用 戶 名:
  • cmq591117730
  • 評論內容:
  • 插入代碼
      
* 以上用戶言論只代表其個人觀點,不代表CSDN網站的觀點或立場
    個人資料
     
    桐桐-Dragon
      3
    • 訪問:725998次
    • 積分:4883
    • 等級: 
    • 排名:第5408名
    • 原創:78篇
    • 轉載:3篇
    • 譯文:1篇
    • 評論:114條
    博客專欄
    文章搜索
    文章分類
    文章存檔
    閱讀排行
    評論排行
    推薦文章
    最新評論
公司簡介 | 招賢納士 | 廣告服務 | 聯系方式 | 版權聲明 | 法律顧問 | 問題報告 | 合作伙伴 | 論壇反饋
網站客服 雜志客服 微博客服 400-660-0108 | 北京創新樂知信息技術有限公司 版權所有 | 江蘇知之為計算機有限公司 | 江蘇樂知網絡技術有限公司

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com