遠程倉庫的配置
在平時的開發(fā)中,我們往往不會使用默認的中央倉庫序目,默認的中央倉庫訪問的速度比較慢臂痕,訪問的人或許很多,有時候也無法滿足我們項目的需求宛琅,可能項目需要的某些構件中央倉庫中是沒有的刻蟹,而在其他遠程倉庫中有,如JBoss Maven倉庫嘿辟。這時舆瘪,可以在pom.xml中配置該倉庫,代碼如下:
<repositories>
<repository>
<id>jboss</id>
<name>JBoss Repository</name>
<url>http://repository.jboss.com/maven2/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
<layout>default</layout>
</repository>
</repositories>
repository:在repositories元素下红伦,可以使用repository子元素聲明一個或者多個遠程倉庫英古。
id:倉庫聲明的唯一id,尤其需要注意的是昙读,Maven自帶的中央倉庫使用的id為central召调,如果其他倉庫聲明也使用該id,就會覆蓋中央倉庫的配置蛮浑。
name:倉庫的名稱唠叛,讓我們直觀方便的知道倉庫是哪個,暫時沒發(fā)現(xiàn)其他太大的含義沮稚。
url:指向了倉庫的地址艺沼,一般來說,該地址都基于http協(xié)議蕴掏,Maven用戶都可以在瀏覽器中打開倉庫地址瀏覽構件障般。
releases和snapshots:用來控制Maven對于發(fā)布版構件和快照版構件的下載權限。需要注意的是enabled子元素盛杰,該例中releases的enabled值為true挽荡,表示開啟JBoss倉庫的發(fā)布版本下載支持,而snapshots的enabled值為false即供,表示關閉JBoss倉庫的快照版本的下載支持定拟。根據(jù)該配置,Maven只會從JBoss倉庫下載發(fā)布版的構件逗嫡,而不會下載快照版的構件青自。
layout:元素值default表示倉庫的布局是Maven2及Maven3的默認布局,而不是Maven1的布局祸穷⌒源基本不會用到Maven1的布局。
其他:對于releases和snapshots來說雷滚,除了enabled需曾,它們還包含另外兩個子元素updatePolicy和checksumPolicy。
元素updatePolicy用來配置Maven從遠處倉庫檢查更新的頻率,默認值是daily呆万,表示Maven每天檢查一次商源。其他可用的值包括:never-從不檢查更新;always-每次構建都檢查更新谋减;interval:X-每隔X分鐘檢查一次更新(X為任意整數(shù))牡彻。
元素checksumPolicy用來配置Maven檢查校驗和文件的策略。當構建被部署到Maven倉庫中時出爹,會同時部署對應的檢驗和文件庄吼。在下載構件的時候,Maven會驗證校驗和文件严就,如果校驗和驗證失敗总寻,當checksumPolicy的值為默認的warn時,Maven會在執(zhí)行構建時輸出警告信息梢为,其他可用的值包括:fail-Maven遇到校驗和錯誤就讓構建失斀バ小;ignore-使Maven完全忽略校驗和錯誤铸董。
2.遠程倉庫的認證
大部分公共的遠程倉庫無須認證就可以直接訪問祟印,但我們在平時的開發(fā)中往往會架設自己的Maven遠程倉庫低斋,出于安全方面的考慮被丧,我們需要提供認證信息才能訪問這樣的遠程倉庫轧房。配置認證信息和配置遠程倉庫不同阿迈,遠程倉庫可以直接在pom.xml中配置,但是認證信息必須配置在settings.xml文件中谍夭。這是因為pom往往是被提交到代碼倉庫中供所有成員訪問的,而settings.xml一般只存在于本機。因此夺艰,在settings.xml中配置認證信息更為安全。
<settings>
...
<!--配置遠程倉庫認證信息-->
<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
...
</settings>
上面代碼我們配置了一個id為releases的遠程倉庫認證信息沉衣。Maven使用settings.xml文件中的servers元素及其子元素server配置倉庫認證信息郁副。認證用戶名為admin,認證密碼為admin123豌习。這里的關鍵是id元素存谎,settings.xml中server元素的id必須與pom.xml中需要認證的repository元素的id完全一致。正是這個id將認證信息與倉庫配置聯(lián)系在了一起肥隆。
3.部署構件至遠程倉庫
我們使用自己的遠程倉庫的目的就是在遠程倉庫中部署我們自己項目的構件以及一些無法從外部倉庫直接獲取的構件既荚。這樣才能在開發(fā)時,供其他對團隊成員使用栋艳。
Maven除了能對項目進行編譯恰聘、測試、打包之外,還能將項目生成的構件部署到遠程倉庫中晴叨。首先凿宾,需要編輯項目的pom.xml文件。配置distributionManagement元素兼蕊,代碼如下:
<distributionManagement>
<repository>
<id>releases</id>
<name>public</name>
<url>http://59.50.95.66:8081/nexus/content/repositories/releases</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Snapshots</name>
<url>http://59.50.95.66:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
distributionManagement包含repository和snapshotRepository子元素初厚,前者表示發(fā)布版本(穩(wěn)定版本)構件的倉庫,后者表示快照版本(開發(fā)測試版本)的倉庫孙技。這兩個元素都需要配置id产禾、name和url,id為遠程倉庫的唯一標識牵啦,name是為了方便人閱讀下愈,關鍵的url表示該倉庫的地址。
往遠程倉庫部署構件的時候蕾久,往往需要認證势似,配置認證的方式同上。
配置正確后僧著,運行命令mvn clean deploy履因,Maven就會將項目構建輸出的構件部署到配置對應的遠程倉庫,如果項目當前的版本是快照版本盹愚,則部署到快照版本的倉庫地址栅迄,否則就部署到發(fā)布版本的倉庫地址。
快照版本和發(fā)布版本的區(qū)別請自行上百度查閱資料皆怕。
4.配置遠程倉庫的鏡像
如果倉庫X可以提供倉庫Y存儲的所有內(nèi)容毅舆,那么就可以認為X是Y的一個鏡像。換句話說愈腾,任何一個可以從倉庫Y獲得的構件憋活,都能夠從它的鏡像中獲取。舉個例子虱黄,http://maven.oschina.net/content/groups/public/ 是中央倉庫http://repo1.maven.org/maven2/ 在中國的鏡像悦即,由于地理位置的因素,該鏡像往往能夠提供比中央倉庫更快的服務橱乱。因此辜梳,可以配置Maven使用該鏡像來替代中央倉庫。編輯settings.xml泳叠,代碼如下:
<mirrors>
<mirror>
<id>maven.oschina.net</id>
<name>maven mirror in China</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
該例中作瞄,mirrorOf的值為central,表示該配置為中央倉庫的鏡像危纫,任何對于中央倉庫的請求都會轉(zhuǎn)至該鏡像宗挥,用戶也可以使用同樣的方法配置其他倉庫的鏡像节预。id表示鏡像的唯一標識符,name表示鏡像的名稱属韧,url表示鏡像的地址安拟。
關于鏡像的一個更為常見的用法是結(jié)合私服。由于私服可以代理任何外部的公共倉庫(包括中央倉庫)宵喂,因此糠赦,對于組織內(nèi)部的Maven用戶來說,使用一個私服地址就等于使用了所有需要的外部倉庫锅棕,這可以將配置集中到私服拙泽,從而簡化Maven本身的配置。在這種情況下裸燎,任何需要的構件都可以從私服獲得顾瞻,私服就是所有倉庫的鏡像。這時德绿,可以配置這樣的一個鏡像:
<!--配置私服鏡像-->
<mirrors>
<mirror>
<id>nexus</id>
<name>internal nexus repository</name>
<url>http://183.238.2.182:8081/nexus/content/groups/public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
該例中<mirrorOf>的值為星號荷荤,表示該配置是所有Maven倉庫的鏡像,任何對于遠程倉庫的請求都會被轉(zhuǎn)至http://183.238.2.182:8081/nexus/content/groups/public/移稳。如果該鏡像倉庫需要認證蕴纳,則配置一個id為nexus的認證信息即可。
需要注意的是个粱,由于鏡像倉庫完全屏蔽了被鏡像倉庫古毛,當鏡像倉庫不穩(wěn)定或者停止服務的時候,Maven仍將無法訪問被鏡像倉庫都许,因而將無法下載構件稻薇。
5.可用的Maven鏡像倉庫
<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>ui</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://uk.maven.org/maven2/</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>
上面的倉庫經(jīng)過測試是可以訪問的。
6.倉庫搜索服務地址
Sonatype Nexus:https://repository.sonatype.org/
MVNrepository:http://mvnrepository.com/
關于依賴的搜索胶征,個人覺得這兩個是最好用的塞椎。