(十一)Maven遠程倉庫的各類配置
1.遠程倉庫的配置html
在平時的開發中,咱們每每不會使用默認的中央倉庫,默認的中央倉庫訪問的速度比較慢,訪問的人或許不少,有時候也沒法知足咱們項目的需求,可能項目須要的某些構件中央倉庫中是沒有的,而在其餘遠程倉庫中有,如JBoss Maven倉庫。這時,能夠在pom.xml中配置該倉庫,代碼以下:瀏覽器
1 <!-- 配置遠程倉庫 --> 2 <repositories> 3 <repository> 4 <id>jboss</id> 5 <name>JBoss Repository</name> 6 <url>http://repository.jboss.com/maven2/</url> 7 <releases> 8 <enabled>true</enabled> 9 <updatePolicy>daily</updatePolicy> 10 </releases> 11 <snapshots> 12 <enabled>false</enabled> 13 <checksumPolicy>warn</checksumPolicy> 14 </snapshots> 15 <layout>default</layout> 16 </repository> 17 </repositories>
repository:在repositories元素下,可使用repository子元素聲明一個或者多個遠程倉庫。安全
id:倉庫聲明的惟一id,尤爲須要注意的是,Maven自帶的中央倉庫使用的id爲central,若是其餘倉庫聲明也使用該id,就會覆蓋中央倉庫的配置。maven
name:倉庫的名稱,讓咱們直觀方便的知道倉庫是哪一個,暫時沒發現其餘太大的含義。佈局
url:指向了倉庫的地址,通常來講,該地址都基於http協議,Maven用戶均可以在瀏覽器中打開倉庫地址瀏覽構件。post
releases和snapshots:用來控制Maven對於發佈版構件和快照版構件的下載權限。須要注意的是enabled子元素,該例中releases的enabled值爲true,表示開啓JBoss倉庫的發佈版本下載支持,而snapshots的enabled值爲false,表示關閉JBoss倉庫的快照版本的下載支持。根據該配置,Maven只會從JBoss倉庫下載發佈版的構件,而不會下載快照版的構件。測試
layout:元素值default表示倉庫的佈局是Maven2及Maven3的默認佈局,而不是Maven1的佈局。基本不會用到Maven1的佈局。ui
其餘:對於releases和snapshots來講,除了enabled,它們還包含另外兩個子元素updatePolicy和checksumPolicy。this
元素updatePolicy用來配置Maven從遠處倉庫檢查更新的頻率,默認值是daily,表示Maven天天檢查一次。其餘可用的值包括:never-從不檢查更新;always-每次構建都檢查更新;interval:X-每隔X分鐘檢查一次更新(X爲任意整數)。url
元素checksumPolicy用來配置Maven檢查校驗和文件的策略。當構建被部署到Maven倉庫中時,會同時部署對應的檢驗和文件。在下載構件的時候,Maven會驗證校驗和文件,若是校驗和驗證失敗,當checksumPolicy的值爲默認的warn時,Maven會在執行構建時輸出警告信息,其餘可用的值包括:fail-Maven遇到校驗和錯誤就讓構建失敗;ignore-使Maven徹底忽略校驗和錯誤。
2.遠程倉庫的認證
大部分公共的遠程倉庫無須認證就能夠直接訪問,但咱們在平時的開發中每每會架設本身的Maven遠程倉庫,出於安全方面的考慮,咱們須要提供認證信息才能訪問這樣的遠程倉庫。配置認證信息和配置遠程倉庫不一樣,遠程倉庫能夠直接在pom.xml中配置,可是認證信息必須配置在settings.xml文件中。這是由於pom每每是被提交到代碼倉庫中供全部成員訪問的,而settings.xml通常只存在於本機。所以,在settings.xml中配置認證信息更爲安全。
1 <settings> 2 2 ... 3 3 <!--配置遠程倉庫認證信息--> 4 4 <servers> 5 5 <server> 6 6 <id>releases</id> 7 7 <username>admin</username> 8 8 <password>admin123</password> 9 9 </server> 10 10 </servers> 11 11 ... 12 12 </settings>
上面代碼咱們配置了一個id爲releases的遠程倉庫認證信息。Maven使用settings.xml文件中的servers元素及其子元素server配置倉庫認證信息。認證用戶名爲admin,認證密碼爲admin123。這裏的關鍵是id元素,settings.xml中server元素的id必須與pom.xml中須要認證的repository元素的id徹底一致。正是這個id將認證信息與倉庫配置聯繫在了一塊兒。
3.部署構件至遠程倉庫
咱們使用本身的遠程倉庫的目的就是在遠程倉庫中部署咱們本身項目的構件以及一些沒法從外部倉庫直接獲取的構件。這樣才能在開發時,供其餘對團隊成員使用。
Maven除了能對項目進行編譯、測試、打包以外,還能將項目生成的構件部署到遠程倉庫中。首先,須要編輯項目的pom.xml文件。配置distributionManagement元素,代碼以下:
1 <distributionManagement> 2 <repository> 3 <id>releases</id> 4 <name>public</name> 5 <url>http://59.50.95.66:8081/nexus/content/repositories/releases</url> 6 </repository> 7 <snapshotRepository> 8 <id>snapshots</id> 9 <name>Snapshots</name> 10 <url>http://59.50.95.66:8081/nexus/content/repositories/snapshots</url> 11 </snapshotRepository> 12 </distributionManagement>
distributionManagement包含repository和snapshotRepository子元素,前者表示發佈版本(穩定版本)構件的倉庫,後者表示快照版本(開發測試版本)的倉庫。這兩個元素都須要配置id、name和url,id爲遠程倉庫的惟一標識,name是爲了方便人閱讀,關鍵的url表示該倉庫的地址。
往遠程倉庫部署構件的時候,每每須要認證,配置認證的方式同上。
配置正確後,運行命令mvn clean deploy,Maven就會將項目構建輸出的構件部署到配置對應的遠程倉庫,若是項目當前的版本是快照版本,則部署到快照版本的倉庫地址,不然就部署到發佈版本的倉庫地址。
快照版本和發佈版本的區別請自行上百度查閱資料。
4.配置遠程倉庫的鏡像
若是倉庫X能夠提供倉庫Y存儲的全部內容,那麼就能夠認爲X是Y的一個鏡像。換句話說,任何一個能夠從倉庫Y得到的構件,都可以從它的鏡像中獲取。舉個例子,http://maven.oschina.net/content/groups/public/ 是中央倉庫http://repo1.maven.org/maven2/ 在中國的鏡像,因爲地理位置的因素,該鏡像每每可以提供比中央倉庫更快的服務。所以,能夠配置Maven使用該鏡像來替代中央倉庫。編輯settings.xml,代碼以下:
1 <mirrors> 2 <mirror> 3 <id>maven.oschina.net</id> 4 <name>maven mirror in China</name> 5 <url>http://maven.oschina.net/content/groups/public/</url> 6 <mirrorOf>central</mirrorOf> 7 </mirror> 8 </mirrors>
該例中,mirrorOf的值爲central,表示該配置爲中央倉庫的鏡像,任何對於中央倉庫的請求都會轉至該鏡像,用戶也可使用一樣的方法配置其餘倉庫的鏡像。id表示鏡像的惟一標識符,name表示鏡像的名稱,url表示鏡像的地址。
關於鏡像的一個更爲常見的用法是結合私服。因爲私服能夠代理任何外部的公共倉庫(包括中央倉庫),所以,對於組織內部的Maven用戶來講,使用一個私服地址就等於使用了全部須要的外部倉庫,這能夠將配置集中到私服,從而簡化Maven自己的配置。在這種狀況下,任何須要的構件均可以從私服得到,私服就是全部倉庫的鏡像。這時,能夠配置這樣的一個鏡像:
1 <!--配置私服鏡像--> 2 <mirrors> 3 <mirror> 4 <id>nexus</id> 5 <name>internal nexus repository</name> 6 <url>http://183.238.2.182:8081/nexus/content/groups/public/</url> 7 <mirrorOf>*</mirrorOf> 8 </mirror> 9 </mirrors>
該例中<mirrorOf>的值爲星號,表示該配置是全部Maven倉庫的鏡像,任何對於遠程倉庫的請求都會被轉至http://183.238.2.182:8081/nexus/content/groups/public/。若是該鏡像倉庫須要認證,則配置一個id爲nexus的認證信息便可。
須要注意的是,因爲鏡像倉庫徹底屏蔽了被鏡像倉庫,當鏡像倉庫不穩定或者中止服務的時候,Maven仍將沒法訪問被鏡像倉庫,於是將沒法下載構件。
5.可用的Maven鏡像倉庫
1 <mirror> 2 <id>repo2</id> 3 <mirrorOf>central</mirrorOf> 4 <name>Human Readable Name for this Mirror.</name> 5 <url>http://repo2.maven.org/maven2/</url> 6 </mirror> 7 8 <mirror> 9 <id>ui</id> 10 <mirrorOf>central</mirrorOf> 11 <name>Human Readable Name for this Mirror.</name> 12 <url>http://uk.maven.org/maven2/</url> 13 </mirror> 14 15 16 <mirror> 17 <id>ibiblio</id> 18 <mirrorOf>central</mirrorOf> 19 <name>Human Readable Name for this Mirror.</name> 20 <url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url> 21 </mirror> 22 23 <mirror> 24 <id>jboss-public-repository-group</id> 25 <mirrorOf>central</mirrorOf> 26 <name>JBoss Public Repository Group</name> 27 <url>http://repository.jboss.org/nexus/content/groups/public</url> 28 </mirror> 29 30 <mirror> 31 <id>JBossJBPM</id> 32 <mirrorOf>central</mirrorOf> 33 <name>JBossJBPM Repository</name> 34 <url>https://repository.jboss.org/nexus/content/repositories/releases/</url> 35 </mirror>
上面的倉庫通過測試是能夠訪問的。
6.倉庫搜索服務地址
Sonatype Nexus:https://repository.sonatype.org/
MVNrepository:http://mvnrepository.com/
關於依賴的搜索,我的以爲這兩個是最好用的。