Nexus擁有全面的權(quán)限控制功能黍聂。默認(rèn)的Nexus訪問為匿名豆拨,僅包含一些最基本的權(quán)限痹束。我們以管理員方式登錄张症。
倉庫與倉庫組
內(nèi)置的倉庫
倉庫屬性:
1.倉庫類型(Type):
- group 倉庫組
- hosted 宿主
- proxy 代理
- virtual 虛擬
2.倉庫格式(Format):
- maven2
- maven1
3.策略(Policy):
- Realease 發(fā)布版本
- Snapshot 快照版本
最后兩列為倉庫的狀態(tài)和路徑仓技。
倉庫:
- Central 該倉庫代理Maven中央倉庫,策略為Release俗他,只會(huì)下載和緩存中央倉庫中的發(fā)布版本構(gòu)件脖捻。
- Releases 策略為Release的宿主類型倉庫,用來部署內(nèi)部的發(fā)布版本構(gòu)件兆衅。
- Snapshots 策略為Snapshot的宿主類型倉庫地沮,用來部署組織內(nèi)部的快照版本構(gòu)件。
- 3rd party 策略為Release的宿主類型倉庫羡亩,用來部署無法從公共倉庫獲得的第三方發(fā)布版本構(gòu)件摩疑。
- Apache Snapshots 策略為Snapshot的代理倉庫,用來代理Apache Maven倉庫的快照版本構(gòu)件畏铆。
- Public Repositories 該倉庫將所有策略為Release的倉庫聚合雷袋,通過一致的地址提供服務(wù)。
Central倉庫會(huì)被用來代理中央倉庫的內(nèi)容及志,并在私服上緩存下來。但是當(dāng)Maven項(xiàng)目X依賴于某個(gè)Google Code的項(xiàng)目寨腔,其構(gòu)件在中央倉庫不存在速侈,那我們需要添加Google Code代理倉庫。如果X還依賴于Oracle的JDBC驅(qū)動(dòng)迫卢,由于版權(quán)因素倚搬,無法從公共倉庫獲得,公司管理員將其部署到3rd party宿主倉庫中乾蛤,供X使用每界。X的快照版本成功后,X構(gòu)件會(huì)被部署到Snapshots宿主倉庫中家卖,供其他項(xiàng)目使用眨层。X的正式版本發(fā)布之后,其構(gòu)件會(huì)被部署到Releases宿主倉庫上荡。由于X用到了很多倉庫趴樱,為每個(gè)倉庫聲明Maven配置很麻煩馒闷,可以直接使用倉庫組Public Repositories∪鳎可以根據(jù)需要進(jìn)行配置纳账,如下圖:
倉庫分類
1.Maven可以直接從宿主倉庫下載構(gòu)件
2.Maven從代理倉庫下載構(gòu)件,代理倉庫間接地從遠(yuǎn)程倉庫下載和緩存構(gòu)件捺疼。
3.Maven可以通過倉庫組下載構(gòu)件疏虫,但是倉庫組沒有實(shí)際內(nèi)容(虛線表示),它會(huì)轉(zhuǎn)向其他倉庫獲取實(shí)際構(gòu)件的內(nèi)容啤呼。
創(chuàng)建宿主倉庫
可以看到配置界面:
- Provider :一般選擇默認(rèn)的Maven2 Repository
- Repository Policy: 快照還是發(fā)布策略
- Default Local Storage Location:表示該倉庫的默認(rèn)存儲(chǔ)目錄卧秘,若為空,則會(huì)基于sonatype-work媳友,生成一個(gè)目錄斯议,sonatype-work/nexus/storage/repository-id/
- Override Local Storage Location:可以用來配置自定義的倉庫目錄位置
- Deployment Policy:一般是選擇允許部署,還有種是Read Only醇锚,只讀哼御。
- Allow File Browsing:是否允許瀏覽倉庫內(nèi)容『富#可以以樹形結(jié)構(gòu)瀏覽倉庫存儲(chǔ)文件的內(nèi)容恋昼。
- Include in Search:是否對(duì)倉庫進(jìn)行索引并提供搜索。
- Publish URL:是否通過URL提供服務(wù)赶促。如果為false液肌,訪問該倉庫地址時(shí),會(huì)得到HTTP 404 Not Found錯(cuò)誤鸥滨。
- Not Found Cache TTL:當(dāng)一個(gè)文件沒有被找到嗦哆,緩存這一不存在信息的時(shí)間,默認(rèn)值為1440分鐘婿滓,在之后的1440分鐘之后再訪問該文件老速,將直接返回不存在,而不會(huì)查找文件系統(tǒng)凸主。
創(chuàng)建代理倉庫
- 最重要的是遠(yuǎn)程倉庫的地址Remote Storage Location橘券,必須是有效的值。
- Download Remote Indexes 是否下載遠(yuǎn)程倉庫的索引卿吐。下載索引旁舰,即使沒有緩存遠(yuǎn)程倉庫的構(gòu)件,還是可以在本地搜索和瀏覽構(gòu)件的基本信息嗡官。
- Checksum Policy:配置校驗(yàn)和出錯(cuò)時(shí)的策略箭窜。
-
Authentication配置,為可選項(xiàng)衍腥。當(dāng)遠(yuǎn)程倉庫需要認(rèn)證的時(shí)候绽快,需要做配置芥丧。
可選HTTP Request Settings,配置Nexus訪問遠(yuǎn)程倉庫時(shí)HTTP請求的參數(shù):
創(chuàng)建倉庫組
Ordered Group Repo包含的倉庫的順序決定了遍歷倉庫的數(shù)序坊罢,將常用的可以放在前面续担。
索引與構(gòu)件搜索
為了可以搜索Maven中央倉庫,將倉庫Central的Download Remote Indexes值改為true
修改后活孩,我們可以從左側(cè)導(dǎo)航欄Scheduled Tasks進(jìn)入任務(wù)列表
下載index過程中物遇,Status為RUNNING,等下載完畢后憾儒,該任務(wù)就會(huì)消失询兴。我們就可以在Nexus中快速搜索構(gòu)件了~
- GAV搜索(GAV Search):通過設(shè)置GroupId、ArtifactId起趾、Version信息進(jìn)行針對(duì)性搜索诗舰。
- 類名搜索(Classname Search):允許用戶搜索包含某個(gè)Java類的構(gòu)件
-
校驗(yàn)和搜索(Checksum Search): 允許直接使用構(gòu)件的校驗(yàn)和搜所該構(gòu)件。
有了中央倉庫的索引训裆,不僅能夠搜索構(gòu)件眶根,還能夠直接瀏覽中央倉庫的內(nèi)容。即索引瀏覽功能边琉。
當(dāng)然我們也可以為宿主倉庫和代理倉庫創(chuàng)建索引
配置Maven從私服Nexus上下載構(gòu)件
為項(xiàng)目POM添加上Nexus私服上的Public倉庫信息:
<!-- Maven倉庫 -->
<repositories>
<repository>
<id>nexus</id>
<name>Nexus</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Nexus</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
這樣的配置只對(duì)當(dāng)前Maven項(xiàng)目有效属百。希望通過一次配置就能讓本機(jī)所有的Maven項(xiàng)目都使用自己的Maven私服。Maven提供了Profile機(jī)制变姨,能讓用戶將倉庫配置放到setting.xml的Profile中
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus</id>
<name>Nexus</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Nexus</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
可以通過配置鏡像族扰,使所有的請求都只通過私服。
<mirror>
<id>nexus</id>
<url>http://localhost:8081/nexus/content/groups/public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
需要注意的是定欧,這里倉庫和插件倉庫的id都為central渔呵,也就是說覆蓋了超級(jí)POM中央倉庫的配置,它們的url已無關(guān)緊要砍鸠,因?yàn)樗姓埱蠖紩?huì)通過鏡像訪問私服扩氢。但是依然配置倉庫和插件倉庫主要是為了開啟對(duì)快照版本下載的支持。Maven需要下載發(fā)布版本/快照版本時(shí)睦番,首先檢查central类茂,看該類型是否支持耍属,得到正面回答后托嚣,根據(jù)鏡像匹配規(guī)則轉(zhuǎn)而訪問私服倉庫。
部署構(gòu)件至Nexus
Nexus倉庫對(duì)于匿名用戶是只讀的厚骗。為了能夠部署構(gòu)件示启,還需要在settings.xml中配置認(rèn)證信息。
<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>xxxxxx</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>xxxxxx</password>
</server>
當(dāng)然我們也可以手動(dòng)上傳構(gòu)件至Nexus领舰,例如上傳第三方構(gòu)件:
Nexus權(quán)限管理
Nexus是基于權(quán)限做訪問控制的夫嗓。
參考《Maven實(shí)戰(zhàn)》9.7