[Maven實戰](6)倉庫(本地倉庫,遠程倉庫,鏡像)


1. 簡單介紹

maven能夠在某個位置統一存儲全部maven項目共享的構件,這個統一的位置就是倉庫。 實際的Maven項目將不會各自存儲其依賴文件,它們僅僅須要聲明這些依賴的坐標,在須要的時候(比如。編譯項目的時候須要將依賴增加到classpath中), maven會自己主動依據坐標找到倉庫中的構件。並使用它們。為了實現重用,項目構建完成后生成的構件也能夠安裝或者部署到倉庫中,供其它項目使用。


2. 倉庫分類

對於maven來說,倉庫僅僅分為兩類: 本地倉庫和遠程倉庫。當maven依據坐標尋找構件的時候,它首先會查看 本地倉庫。假設本地倉庫存在此構件,則直接使用;假設本地倉庫不存在此構件,或者須要查看是否有更新的構件版本號,maven就會去 遠程倉庫查找,發現須要的構件之后,下載到本地倉庫再使用。假設本地倉庫和遠程倉庫都沒有須要的構件,maven就會 報錯

在這個最基本分類的基礎上,還有必要介紹一些特殊的遠程倉庫。

中央倉庫是maven核心自帶的遠程倉庫。它包括了絕大部分開源的構件。在默認配置下,當本地倉庫沒有maven須要的構件的時候,它就會嘗試從中央倉庫下載。私服是還有一種特殊的遠程倉庫。為了節省帶寬和時間,應該在局域網內架設一個私有的倉庫server。用其代理全部外部的遠程倉庫。

內部的項目還能部署到私服上供其它項目使用。除了中央倉庫和私服。還有非常多其它公開的遠程倉庫,常見的有java.net Maven庫(http://download.java.net/maven/2/)和jboss Maven庫(http://repository.jboss.com/maven2/)等。

8.png

3. 本地倉庫

默認情況下,無論是在windows還是linux上,每一個用戶在自己的用戶文件夾下都有一個路徑名為.m2/repository/的倉庫文件夾。有時候,由於某些原因(比如C盤空間不夠,或者要重裝系統等等)。用戶會想要自己定義本地倉庫文件夾地址。這時,能夠編輯文件 ~/.m2/settings.xml,設置localRepository元素的值為想要的倉庫地址。比如:
    
    
   
   
           
<settings>
<localRepository>D:\IT\maven\repo</localRepository>
<settings>
這樣,該用戶的本地倉庫地址就被設置成了 D:\IT\maven\repo。

須要注意的是。默認情況下,~/.m2/settings.xml文件是不存在的,用戶須要從Maven安裝文件夾復制$M2_HOME/conf/settings.xml文件再進行編輯。


一個構件僅僅有在本地倉庫中之后,才干由其它Maven項目使用,那么構件怎樣進入到本地倉庫中呢?
(1)最常見的是Maven 從遠程倉庫下載到本地倉庫中。當我們第一次執行某個命令時,比如mvn compile時,會下載大量文件當本地倉庫中。

(2)另一種常見的情況是,將 本地項目的構件安裝到Maven倉庫中。使用命令:mvn clean install就可以完畢安裝。install目標就是將項目的構建輸出文件安裝到本地倉庫。

4. 遠程倉庫

安裝好Maven后,假設不運行不論什么Maven命令。本地倉庫文件夾是不存在的。當用戶輸入第一條Maven命令之后。Maven才會創建本地倉庫,然后依據配置和須要。從遠程倉庫下載構件至本地倉庫。
4.png


本地倉庫好比 書房。我須要讀書的時候先從書房找,對應的。Maven須要構件的時候先從本地倉庫找。 遠程倉庫就好比 書店,當我無法從自己的書房找到須要的書的時候。就會從書店購買后放到書房。對應的,當Maven無法從本地倉庫找到須要的書的時候,就會從遠程倉庫下載構件到本地倉庫。一般的,對於每一個人來說,書房僅僅有一個,但外面的書店卻有非常多。類似的,對於Maven來說。每一個用戶僅僅有一個本地倉庫。但能夠配置非常多遠程倉庫。

5. 中央倉庫

因為最原始的本地倉庫是空的,Maven必須知道至少一個可用的遠程倉庫。才干在運行Maven命令的時候下載到須要的構件。 中央倉庫就是這樣一個默認的遠程倉庫。Maven的安裝文件自帶了中央倉庫的配置。讀者能夠使用解壓工具打開jar文件$M2_HOME/lib/maven-model-builder-3.3.9.jar,然后訪問路徑:org/apache/maven/model/pom-4.0.0.xml。能夠看到例如以下的配置:
    
    
   
   
           
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

包括這段配置的文件是全部Maven項目都會繼承的超級POM。

這段配置使用central對中央倉庫進行唯一標識,其名稱為Central Repository,它使用default進行倉庫布局。最后須要注意的是snapshots元素,其子元素enabled的值為false,表示不從該中央倉庫下載快照版本號的構件。


6. 鏡像倉庫

假設倉庫X能夠提供倉庫Y存儲的全部內容,那么就能夠覺得X是Y的一個鏡像。換句話說。不論什么一個能夠從倉庫Y獲得的構件,都能夠從它的鏡像中獲取。

舉個樣例,http://maven.oschina.net/content/groups/public/ 是中央倉庫http://repo1.maven.org/maven2/ 在中國的鏡像,因為地理位置的因素。該鏡像往往能夠提供比中央倉庫更快的服務。

因此,能夠配置Maven使用該鏡像來替代中央倉庫

編輯settings.xml(apache-maven-3.3.9\conf\settings.xml)。代碼例如以下:

    
    
   
   
           
<mirrors>
<mirror>
<id>maven.oschina.net</id>
<mirrorOf>central</mirrorOf>
<name>maven mirror in China</name>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
</mirrors>

該例中,mirrorOf的值為central。表示該配置為中央倉庫的鏡像。不論什么對於中央倉庫的請求都會轉至該鏡像。用戶也能夠使用相同的方法配置其它倉庫的鏡像。

id表示鏡像的唯一標識符,name表示鏡像的名稱。url表示鏡像的地址。


關於鏡像的一個更為常見的使用方法是結合私服。

因為私服能夠代理不論什么外部的公共倉庫(包含中央倉庫),因此。對於組織內部的Maven用戶來說。使用一個私服地址就等於使用了全部須要的外部倉庫,這能夠將配置集中到私服。從而簡化Maven本身的配置。

在這樣的情況下,不論什么須要的構件都能夠從私服獲得,私服就是全部倉庫的鏡像。

以后再慢慢介紹私服的使用。 



以下提供一些別的鏡像倉庫:
    
    
   
   
           
<mirror>
<id>CN</id>
<name>OSChina Central</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
 
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
 
<mirror>
<id>net-cn</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://maven.net.cn/content/groups/public/</url>
</mirror>
 
<mirror>
<id>ibiblio</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
</mirror>
<mirror>
<id>jboss-public-repository-group</id>
<mirrorOf>central</mirrorOf>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>
 
<mirror>
<id>JBossJBPM</id>
<mirrorOf>central</mirrorOf>
<name>JBossJBPM Repository</name>
<url>https://repository.jboss.org/nexus/content/repositories/releases/</url>
</mirror>



來源於:《Maven實戰》



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM