1.遠程倉庫的配置
在平時的開發(fā)中,我們往往不會使用默認的中央倉庫,默認的中央倉庫訪問的速度比較慢,訪問的人或許很多,有時候也無法滿足我們項目的需求,可能項目需要的某些構(gòu)件中央倉庫中是沒有的,而在其他遠程倉庫中有,如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用戶都可以在瀏覽器中打開倉庫地址瀏覽構(gòu)件。releases和snapshots:
用來控制Maven對于發(fā)布版構(gòu)件和快照版構(gòu)件的下載權(quán)限。需要注意的是enabled子元素,該例中releases的enabled值為true,表示開啟JBoss倉庫的發(fā)布版本下載支持,而snapshots的enabled值為false,表示關(guān)閉JBoss倉庫的快照版本的下載支持。根據(jù)該配置,Maven只會從JBoss倉庫下載發(fā)布版的構(gòu)件,而不會下載快照版的構(gòu)件。layout:
元素值default表示倉庫的布局是Maven2及Maven3的默認布局,而不是Maven1的布局?;静粫玫組aven1的布局。其他:
對于releases和snapshots來說,除了enabled,它們還包含另外兩個子元素updatePolicy和checksumPolicy。
元素updatePolicy用來配置Maven從遠處倉庫檢查更新的頻率,默認值是daily
,表示Maven每天檢查一次。其他可用的值包括:never
-從不檢查更新; always
-每次構(gòu)建都檢查更新;interval
:X-每隔X分鐘檢查一次更新(X為任意整數(shù))。
元素checksumPolicy
用來配置Maven檢查校驗和文件的策略。當構(gòu)建被部署到Maven倉庫中時,會同時部署對應(yīng)的檢驗和文件。在下載構(gòu)件的時候,Maven會驗證校驗和文件,如果校驗和驗證失敗,當checksumPolicy的值為默認的warn時,Maven會在執(zhí)行構(gòu)建時輸出警告信息,其他可用的值包括:fail-Maven
: 遇到校驗和錯誤就讓構(gòu)建失??;ignore
:使Maven完全忽略校驗和錯誤。
2.遠程倉庫的認證
大部分公共的遠程倉庫無須認證就可以直接訪問,但我們在平時的開發(fā)中往往會架設(shè)自己的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。這里的關(guān)鍵是id元素,settings.xml中server元素的id必須與pom.xml中需要認證的repository元素的id完全一致。正是這個id將認證信息與倉庫配置聯(lián)系在了一起。
3.部署構(gòu)件至遠程倉庫
我們使用自己的遠程倉庫的目的就是在遠程倉庫中部署我們自己項目的構(gòu)件以及一些無法從外部倉庫直接獲取的構(gòu)件。這樣才能在開發(fā)時,供其他對團隊成員使用。
Maven除了能對項目進行編譯、測試、打包之外,還能將項目生成的構(gòu)件部署到遠程倉庫中。首先,需要編輯項目的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)定版本)構(gòu)件的倉庫,后者表示快照版本(開發(fā)測試版本)的倉庫。這兩個元素都需要配置id、name和url,id為遠程倉庫的唯一標識,name是為了方便人閱讀,關(guān)鍵的url表示該倉庫的地址。
往遠程倉庫部署構(gòu)件的時候,往往需要認證,配置認證的方式同上。
配置正確后,運行命令mvn clean deploy,Maven就會將項目構(gòu)建輸出的構(gòu)件部署到配置對應(yīng)的遠程倉庫,如果項目當前的版本是快照版本,則部署到快照版本的倉庫地址,否則就部署到發(fā)布版本的倉庫地址。
快照版本和發(fā)布版本的區(qū)別請自行上百度查閱資料。
4.配置遠程倉庫的鏡像
如果倉庫X可以提供倉庫Y存儲的所有內(nèi)容,那么就可以認為X是Y的一個鏡像。換句話說,任何一個可以從倉庫Y獲得的構(gòu)件,都能夠從它的鏡像中獲取。舉個例子,http://maven.oschina.net/content/groups/public/是中央倉庫http://repo1.maven.org/maven2/ 在中國的鏡像,由于地理位置的因素,該鏡像往往能夠提供比中央倉庫更快的服務(wù)。因此,可以配置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表示鏡像的地址。
關(guān)于鏡像的一個更為常見的用法是結(jié)合私服。由于私服可以代理任何外部的公共倉庫(包括中央倉庫),因此,對于組織內(nèi)部的Maven用戶來說,使用一個私服地址就等于使用了所有需要的外部倉庫,這可以將配置集中到私服,從而簡化Maven本身的配置。在這種情況下,任何需要的構(gòu)件都可以從私服獲得,私服就是所有倉庫的鏡像。這時,可以配置這樣的一個鏡像:
<!--配置私服鏡像-->
<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)定或者停止服務(wù)的時候,Maven仍將無法訪問被鏡像倉庫,因而將無法下載構(gòu)件。
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.倉庫搜索服務(wù)地址
Sonatype Nexus:https://repository.sonatype.org/
MVNrepository:http://mvnrepository.com/
關(guān)于依賴的搜索,個人覺得這兩個是最好用的。