欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Maven使用Nexus創(chuàng)建私服的實(shí)現(xiàn)

 更新時(shí)間:2024年04月12日 09:53:09   作者:布道師小羊  
本文主要介紹了Maven使用Nexus創(chuàng)建私服的實(shí)現(xiàn),通過(guò)建立自己的私服,就可以降低中央倉(cāng)庫(kù)負(fù)荷、節(jié)省外網(wǎng)帶寬、加速M(fèi)aven構(gòu)建、自己部署構(gòu)件等,從而高效地使用Maven,感興趣的可以了解一下

私服不是Maven的核心概念,它僅僅是一種衍生出來(lái)的特殊的Maven倉(cāng)庫(kù)。通過(guò)建立自己的私服,就可以降低中央倉(cāng)庫(kù)負(fù)荷、節(jié)省外網(wǎng)帶寬、加速M(fèi)aven構(gòu)建、自己部署構(gòu)件等,從而高效地使用Maven。

在這里插入圖片描述

有三種專門的Maven倉(cāng)庫(kù)管理軟件可以用來(lái)幫助大家建立私服:Apache基金會(huì)的Archiva、JFrog的Artifactory和Sonatype的Nexus。其中,Archiva是開源的,而Artifactory和Nexus的核心也是開源的,因此我們可以自由選擇使用。事實(shí)上,Nexus也是當(dāng)前最流行的Maven倉(cāng)庫(kù)管理軟件。

紹Nexus的主要功能,并結(jié)合大量圖片幫助大家快速地建立起自己的Maven私服。

1、Nexus簡(jiǎn)介

2005年12月,Tamas Cservenak由于受不了匈牙利電信ADSL的低速度,開始著手開發(fā)Proximity——一個(gè)很簡(jiǎn)單的Web應(yīng)用。它可以代理并緩存Maven構(gòu)件,當(dāng)Maven需要下載構(gòu)件的時(shí)候,就不需要反復(fù)依賴于ADSL。到2007年,Sonatype邀請(qǐng)Tamas參與創(chuàng)建一個(gè)更酷的Maven倉(cāng)庫(kù)管理軟件,這就是后來(lái)的Nexus。

Nexus團(tuán)隊(duì)的成員來(lái)自世界各地,它也從社區(qū)收到了大量反饋和幫助,在寫本書的時(shí)候,Nexus剛發(fā)布1.7.2版本,它也正健康快速地成長(zhǎng)著。

Nexus分為開源版和專業(yè)版,其中開源版本基于GPLv3許可證,其特性足以滿足大部分Maven用戶的需要。以下是一些Nexus開源版本的特性:

  • 較小的內(nèi)存占用(最少僅為28MB)
  • 基于ExtJS的友好界面
  • 基于Restlet的完全REST API支持代理倉(cāng)庫(kù)、宿主倉(cāng)庫(kù)和倉(cāng)庫(kù)組
  • 基于文件系統(tǒng),不需要數(shù)據(jù)庫(kù)
  • 支持倉(cāng)庫(kù)索引和搜索
  • 支持從界面上傳Maven構(gòu)件
  • 細(xì)粒度的安全控制

Nexus專業(yè)版本是需要付費(fèi)購(gòu)買的,除了開源版本的所有特性之外,它主要包含一些企業(yè)安全控制、發(fā)布流程控制等需要的特性。感興趣的可以訪問(wèn)該地址了解詳情:http://www.sonatype.com/products/nexus/community

2、安裝Nexus

Nexus是典型的Java Web應(yīng)用,它有兩種安裝包,一種是包含Jetty容器的Bundle包,另一種是不包含Web容器的war包。

2.1、下載Nexus

下載地址:https://download.sonatype.com/nexus

然后將下載的文件上傳到 Linux 系統(tǒng)(我用的系統(tǒng)版本是CentOS7),解壓后即可使用,不需要安裝(這里我放在/opt/nexus目錄下)。

在這里插入圖片描述

需要注意:Linux 必須提前安裝 JDK。

2.2、啟動(dòng)Nexus

通過(guò)以下命令啟動(dòng):

# 啟動(dòng)
/opt/nexus/nexus-3.61.0-02/bin/nexus start
# 查看狀態(tài)
/opt/nexus/nexus-3.61.0-02/bin/nexus status
#停止
/opt/nexus/nexus-3.61.0-02/bin/nexus stop

當(dāng)看到nexus is running的時(shí)候說(shuō)明項(xiàng)目已經(jīng)啟動(dòng)了,默認(rèn)端口號(hào)是8081。如果提示nexus is stopped則說(shuō)明端口被占用了,我們可以更改nexus的默認(rèn)端口號(hào)。其配置在 /opt/nexus/nexus-3.61.0-02/etc目錄下的nexus-default.properties 里面,這里我改成了8090。

在這里插入圖片描述

接下來(lái)就可以啟動(dòng)訪問(wèn)了:

http://[Linux 服務(wù)器地址]:8090/ 

ps:這里需要說(shuō)明一下,如果Nexus顯示已經(jīng)啟動(dòng)了,但是訪問(wèn)不到,有可能是端口的對(duì)外防火墻沒(méi)有打開。

開啟防火墻的步驟為:

#首先,確保firewalld已經(jīng)啟動(dòng):
sudo systemctl start firewalld
#確保firewalld被設(shè)置為開機(jī)啟動(dòng):
sudo systemctl enable firewalld
#使用firewall-cmd打開一個(gè)端口。例如,要打開TCP的8090端口:
sudo firewall-cmd --zone=public --add-port=8090/tcp --permanent
#重新加載防火墻以使更改生效:
sudo firewall-cmd --reload
#如果需要,你也可以驗(yàn)證端口是否已經(jīng)開放:
sudo firewall-cmd --zone=public --list-ports

Nexus首頁(yè)如下,第一次需要登錄,然后修改初始密碼。

用戶名:admin
初始密碼:在/opt/nexus/sonatype-work/nexus3/admin.password 文件里

在這里插入圖片描述

3、Nexus的倉(cāng)庫(kù)與倉(cāng)庫(kù)組

作為Maven倉(cāng)庫(kù)服務(wù)軟件,倉(cāng)庫(kù)自然是Nexus中最重要的概念。Nexus包含了各種類型的倉(cāng)庫(kù)概念,包括代理倉(cāng)庫(kù)、宿主倉(cāng)庫(kù)和倉(cāng)庫(kù)組等。每一種倉(cāng)庫(kù)都提供了豐富實(shí)用的配置參數(shù),方便用戶根據(jù)需要進(jìn)行定制。

3.1、Nexus內(nèi)置的倉(cāng)庫(kù)

在具體介紹每一種類型的倉(cāng)庫(kù)之前,先瀏覽一下Nexus內(nèi)置的一些倉(cāng)庫(kù)。單擊Nexus界面左邊導(dǎo)航欄中的Repositories鏈接,就能在界面右邊看到如下圖所示的內(nèi)容:

在這里插入圖片描述

這個(gè)列表已經(jīng)包含了所有類型的Nexus倉(cāng)庫(kù)。從中可以看到倉(cāng)庫(kù)有四種類型:group(倉(cāng)庫(kù)組)、hosted(宿主)、proxy(代理)和virtual(虛擬):

倉(cāng)庫(kù)類型說(shuō)明
proxy某個(gè)遠(yuǎn)程倉(cāng)庫(kù)的代理
group存放:通過(guò) Nexus 獲取的第三方 jar 包
hosted存放:本團(tuán)隊(duì)其他開發(fā)人員部署到 Nexus 的 jar 包

每個(gè)倉(cāng)庫(kù)的格式為maven2或者maven1。此外,倉(cāng)庫(kù)還有一個(gè)屬性為Policy(策略),表示該倉(cāng)庫(kù)為發(fā)布(Release)版本倉(cāng)庫(kù)還是快照(Snapshot)版本倉(cāng)庫(kù)。最后兩列的值為倉(cāng)庫(kù)的狀態(tài)和路徑。

下面解釋一下各個(gè)倉(cāng)庫(kù)的用途:

倉(cāng)庫(kù)名稱說(shuō)明
maven-centralNexus 對(duì) Maven 中央倉(cāng)庫(kù)的代理,其策略為Release,因此只會(huì)下載和緩存中央倉(cāng)庫(kù)中的發(fā)布版本構(gòu)件。
maven-publicNexus 默認(rèn)創(chuàng)建,供開發(fā)人員下載使用的組倉(cāng)庫(kù)
maven-releasseNexus 默認(rèn)創(chuàng)建,供開發(fā)人員部署自己 jar 包的宿主倉(cāng)庫(kù),要求 releasse 版本
maven-snapshotsNexus 默認(rèn)創(chuàng)建,供開發(fā)人員部署自己 jar 包的宿主倉(cāng)庫(kù),要求 snapshots 版本

其中 maven-public 相當(dāng)于倉(cāng)庫(kù)總和,默認(rèn)把其他 3 個(gè)倉(cāng)庫(kù)加進(jìn)來(lái)一起對(duì)外提供服務(wù)了,另外,如果有自己建的倉(cāng)庫(kù),也要加進(jìn)該倉(cāng)庫(kù)才有用。

3.2、Nexus倉(cāng)庫(kù)分類的概念

為了幫助大家理解宿主倉(cāng)庫(kù)、代理倉(cāng)庫(kù)和倉(cāng)庫(kù)組的概念,下圖用更為直觀的方式展現(xiàn)了它們的用途和區(qū)別:

在這里插入圖片描述

從上圖中可以看到,Maven可以直接從宿主倉(cāng)庫(kù)下載構(gòu)件;Maven也可以從代理倉(cāng)庫(kù)下載構(gòu)件,而代理倉(cāng)庫(kù)會(huì)間接地從遠(yuǎn)程倉(cāng)庫(kù)下載并緩存構(gòu)件;最后,為了方便,Maven可以從倉(cāng)庫(kù)組下載構(gòu)件,而倉(cāng)庫(kù)組沒(méi)有實(shí)際內(nèi)容(圖中用虛線表示),它會(huì)轉(zhuǎn)向其包含的宿主倉(cāng)庫(kù)或者代理倉(cāng)庫(kù)獲得實(shí)際構(gòu)件的內(nèi)容。

3.3、創(chuàng)建倉(cāng)庫(kù)

初始狀態(tài)下,這幾個(gè)倉(cāng)庫(kù)都沒(méi)有內(nèi)容:

在這里插入圖片描述

除了自帶的倉(cāng)庫(kù),有時(shí)候我們需要單獨(dú)創(chuàng)建自己的倉(cāng)庫(kù),按照默認(rèn)創(chuàng)建的倉(cāng)庫(kù)類型來(lái)創(chuàng)建我們自己的倉(cāng)庫(kù)。

點(diǎn)擊Create Repository:

在這里插入圖片描述

選擇如下三種類型的倉(cāng)庫(kù):

在這里插入圖片描述

1、創(chuàng)建Nexus宿主倉(cāng)庫(kù)

在這里插入圖片描述

2、創(chuàng)建Nexus代理倉(cāng)庫(kù)

輸入倉(cāng)庫(kù)名以及被代理倉(cāng)庫(kù)的URL,這里我輸入阿里云的倉(cāng)庫(kù)地址,默認(rèn)為中央倉(cāng)庫(kù)。

在這里插入圖片描述

3、創(chuàng)建Nexus倉(cāng)庫(kù)組

配置中的ID、Name等信息這里不再贅述。需要注意的是,倉(cāng)庫(kù)組沒(méi)有Release和Snapshot的區(qū)別,這不同于宿主倉(cāng)庫(kù)和代理倉(cāng)庫(kù)。在配置界面中,用戶可以非常直觀地選擇Nexus中的倉(cāng)庫(kù),將其聚合成一個(gè)虛擬的倉(cāng)庫(kù)組。注意,倉(cāng)庫(kù)組所包含的倉(cāng)庫(kù)的順序決定了倉(cāng)庫(kù)組遍歷其所含倉(cāng)庫(kù)的次序,因此最好將常用的倉(cāng)庫(kù)放在前面,當(dāng)用戶從倉(cāng)庫(kù)組下載構(gòu)件的時(shí)候,就能夠盡快地訪問(wèn)到包含構(gòu)件的倉(cāng)庫(kù)。

在這里插入圖片描述

上面的倉(cāng)庫(kù)創(chuàng)建好之后就可以在首頁(yè)看到了:

在這里插入圖片描述

4、Nexus的索引與構(gòu)件搜索

既然Nexus能夠維護(hù)宿主倉(cāng)庫(kù)并代理緩存遠(yuǎn)程倉(cāng)庫(kù)(如Maven中央庫(kù)),那么一個(gè)簡(jiǎn)單的需求就自然浮現(xiàn)出來(lái)了,這就是搜索。Maven中央庫(kù)有幾十萬(wàn)構(gòu)件供用戶使用,但有時(shí)我們往往僅僅知道某個(gè)關(guān)鍵字,如Ehcache,而不知道其確切的Maven坐標(biāo)。Nexus通過(guò)維護(hù)倉(cāng)庫(kù)的索引來(lái)提供搜索功能,能在很大程度上方便Maven用戶定位構(gòu)件坐標(biāo)。

Sonatype提供的在線免費(fèi)搜索服務(wù),其實(shí)用戶可以很方便地自己維護(hù)一個(gè)Nexus實(shí)例,并提供搜索服務(wù)。

為了能夠搜索Maven中央庫(kù),首先需要設(shè)置Nexus中的Maven Central代理倉(cāng)庫(kù)下載遠(yuǎn)程索引,如下圖所示。需要注意的是,默認(rèn)這個(gè)配置的值是關(guān)閉的。此外,由于中央庫(kù)的內(nèi)容比較多,因此其索引文件比較大,Nexus下載該文件也需要比較長(zhǎng)的時(shí)間,大家還需要耐心等待。

在這里插入圖片描述

可以想象到,Nexus在后臺(tái)運(yùn)行了一個(gè)任務(wù)來(lái)下載中央倉(cāng)庫(kù)的索引,幸運(yùn)的是,用戶可以通過(guò)界面直接觀察這一任務(wù)的狀態(tài)。單擊界面左邊導(dǎo)航欄中的Scheduled Tasks鏈接后,用戶就能在界面的右邊看到系統(tǒng)的調(diào)度任務(wù),如果Nexus正在下載中央倉(cāng)庫(kù)的索引,用戶就能看到下圖所示的一個(gè)任務(wù),其狀態(tài)為RUNNING。在索引下載完畢之后,該任務(wù)就會(huì)消失。

在這里插入圖片描述

有了索引,用戶即可搜索Maven構(gòu)件了。Nexus界面左邊導(dǎo)航欄有一個(gè)快捷搜索框,在其中輸入關(guān)鍵字后,單擊搜索按鈕就能快速得到搜索結(jié)果,如下圖所示:

在這里插入圖片描述

除了簡(jiǎn)單的關(guān)鍵字搜索,Nexus還提供了GAV搜索、類名搜索和校驗(yàn)和搜索等功能,用戶可以單擊搜索頁(yè)面左上角的下拉菜單選擇高級(jí)搜索功能:

  • GAV搜索(GAV Search)允許用戶通過(guò)設(shè)置GroupId、ArtifactId和Version等信息來(lái)進(jìn)行更有針對(duì)性的搜索。
  • 類名搜索(Classname Search)允許用戶搜索包含某個(gè)Java類的構(gòu)件。
  • 校驗(yàn)和搜索(Checksum Search)允許用戶直接使用構(gòu)件的校驗(yàn)和來(lái)搜索該構(gòu)件。

當(dāng)然,用戶也可以自己手動(dòng)輸入GroupId、ArtifactId等信息來(lái)進(jìn)行GAV搜索。

在這里插入圖片描述

有了中央倉(cāng)庫(kù)的索引,用戶不僅能夠搜索構(gòu)件,還能夠直接瀏覽中央倉(cāng)庫(kù)的內(nèi)容。這便是Nexus的索引瀏覽功能。在Repositories頁(yè)面中,選擇Browse Index選項(xiàng)卡,就能看到中央倉(cāng)庫(kù)內(nèi)容的樹形結(jié)構(gòu),如下圖所示:

在這里插入圖片描述

5、配置Maven從Nexus下載構(gòu)件

在POM中為Maven配置倉(cāng)庫(kù)和插件倉(cāng)庫(kù)。例如,當(dāng)需要為項(xiàng)目添加Nexus私服上的public倉(cāng)庫(kù)時(shí),可以按代碼清單如下所示配置,在POM中配置Nexus倉(cāng)庫(kù):

<project>
……
<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>
……
</project>

這樣的配置只對(duì)當(dāng)前Maven項(xiàng)目有效,在實(shí)際應(yīng)用中,我們往往想要通過(guò)一次配置就能讓本機(jī)所有的Maven項(xiàng)目都使用自己的Maven私服。這個(gè)時(shí)候大家可能會(huì)想到settings.xml文件,該文件中的配置對(duì)所有本機(jī)Maven項(xiàng)目有效,但是settings.xml并不支持直接配置repositories和pluginRepositories。所幸Maven還提供了Profile機(jī)制,能讓用戶將倉(cāng)庫(kù)配置放到setting.xml中的Profile中,如代碼清單如下所示:

在settings.xml中配置Nexus倉(cāng)庫(kù):

<settings>
……
<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>
……</settings>

該配置中使用了一個(gè)id為nexus的profile,這個(gè)profile包含了相關(guān)的倉(cāng)庫(kù)配置,同時(shí)配置中又使用activeProfile元素將nexus這個(gè)profile激活,這樣當(dāng)執(zhí)行Maven構(gòu)建的時(shí)候,激活的profile會(huì)將倉(cāng)庫(kù)配置應(yīng)用到項(xiàng)目中去。

上面代碼清單中的配置已經(jīng)能讓本機(jī)所有的Maven項(xiàng)目從Nexus私服下載構(gòu)件。細(xì)心的人可能會(huì)注意到,Maven除了從Nexus下載構(gòu)件之外,還會(huì)不時(shí)地訪問(wèn)中央倉(cāng)庫(kù)central,我們希望的是所有Maven下載請(qǐng)求都僅僅通過(guò)Nexus,以全面發(fā)揮私服的作用。這個(gè)時(shí)候就需要借助于Maven鏡像配置了??梢詣?chuàng)建一個(gè)匹配任何倉(cāng)庫(kù)的鏡像,鏡像的地址為私服,這樣,Maven對(duì)任何倉(cāng)庫(kù)的構(gòu)件下載請(qǐng)求都會(huì)轉(zhuǎn)到私服中。具體配置見代碼清單如下所示,配置鏡像讓Maven只使用私服:

<settings>
……<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/nexus/content/groups/public</url>
</mirror>
</mirrors>
<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>
……
</settings>

關(guān)于鏡像、profile及profile激活的配置不再贅述,這里需要解釋的是倉(cāng)庫(kù)及插件倉(cāng)庫(kù)配置,它們的id都為central,也就是說(shuō),覆蓋了超級(jí)POM中央倉(cāng)庫(kù)的配置,它們的url已無(wú)關(guān)緊要,因?yàn)樗姓?qǐng)求都會(huì)通過(guò)鏡像訪問(wèn)私服地址。配置倉(cāng)庫(kù)及插件倉(cāng)庫(kù)的主要目的是開啟對(duì)快照版本下載的支持,當(dāng)Maven需要下載發(fā)布版或快照版構(gòu)件的時(shí)候,它首先檢查central,看該類型的構(gòu)件是否支持,得到正面的回答之后,再根據(jù)鏡像匹配規(guī)則轉(zhuǎn)而訪問(wèn)私服倉(cāng)庫(kù)地址。

6、部署構(gòu)件至Nexus

如果只為代理外部公共倉(cāng)庫(kù),那么Nexus的代理倉(cāng)庫(kù)就已經(jīng)能夠完全滿足需要了。對(duì)于另一類Nexus倉(cāng)庫(kù)——宿主倉(cāng)庫(kù)來(lái)說(shuō),它們的主要作用是儲(chǔ)存組織內(nèi)部的,或者一些無(wú)法從公共倉(cāng)庫(kù)中獲得的第三方構(gòu)件,供大家下載使用。用戶可以配置Maven自動(dòng)部署構(gòu)件至Nexus的宿主倉(cāng)庫(kù),也可以通過(guò)界面手動(dòng)上傳構(gòu)件。

6.1、使用Maven部署構(gòu)件至Nexus

日常開發(fā)生成的快照版本構(gòu)件可以直接部署到Nexus中策略為Snapshot的宿主倉(cāng)庫(kù)中,項(xiàng)目正式發(fā)布的構(gòu)件則應(yīng)該部署到Nexus中策略為Release的宿主倉(cāng)庫(kù)中。POM的配置方式,下面的代碼清單列出了一段典型的配置,配置Maven部署構(gòu)件至Nexus:

<project>
……
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Releases Repository</name>
<url>http://localhost:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Snapshots Repository</name>
<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
……
</project>

Nexus的倉(cāng)庫(kù)對(duì)于匿名用戶是只讀的。為了能夠部署構(gòu)件,還需要在settings.xml中配置認(rèn)證信息,如代碼清單如下所示:

<settings>
……
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>*****</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>*****</password>
</server></servers>
……
</settings>

6.2、手動(dòng)部署第三方構(gòu)件至Nexus

某些Java Jar文件(如Oracle)的JDBC驅(qū)動(dòng),由于許可證的因素,它們無(wú)法公開地放在公共倉(cāng)庫(kù)中。此外,還有大量的小型開源項(xiàng)目,它們沒(méi)有把自己的構(gòu)件分發(fā)到中央倉(cāng)庫(kù)中,也沒(méi)有維護(hù)自己的倉(cāng)庫(kù),因此也無(wú)法從公共倉(cāng)庫(kù)獲得。這個(gè)時(shí)候用戶就需要將這類構(gòu)件手動(dòng)下載到本地,然后通過(guò)Nexus的界面上傳到私服中。

要上傳第三方構(gòu)件,首先選擇一個(gè)宿主倉(cāng)庫(kù)如3rd party,然后在頁(yè)面的下方選擇Artifact Upload選項(xiàng)卡。在上傳構(gòu)件的時(shí)候,Nexus要求用戶確定其Maven坐標(biāo),如果該構(gòu)件是通過(guò)Maven構(gòu)建的,那么可以在GAV Definition下拉列表中選擇From POM,否則就選GAV Parameters。用戶需要為該構(gòu)件定義一個(gè)Maven坐標(biāo),例如上傳一個(gè)Oracle 11g的JDBC驅(qū)動(dòng),則可以按下圖所示輸入坐標(biāo):

在這里插入圖片描述

定義好坐標(biāo)之后,單擊Select Artifact(s)to Upload按扭從本機(jī)選擇要上傳的構(gòu)件,然后單擊Add Artifact按鈕將其加入到上傳列表中。Nexus允許用戶一次上傳一個(gè)主構(gòu)件和多個(gè)附屬構(gòu)件(即Classifier)。最后,單擊頁(yè)面最下方的Upload Artifact(s)按鈕將構(gòu)件上傳到倉(cāng)庫(kù)中。

7、Nexus的權(quán)限管理

在組織中使用Nexus的時(shí)候往往會(huì)有一些安全性需求,例如希望只有管理員才能配置Nexus,只有某些團(tuán)隊(duì)成員才能部署構(gòu)件,或者更細(xì)一些的要求,例如每個(gè)項(xiàng)目都有自己的Nexus宿主倉(cāng)庫(kù),且只能部署項(xiàng)目構(gòu)件至該倉(cāng)庫(kù)中。Nexus提供了全面的權(quán)限控制特性,能讓用戶自由地根據(jù)需要配置Nexus用戶、角色、權(quán)限等。

7.1、Nexus的訪問(wèn)控制模型

Nexus是基于權(quán)限(Privilege)做訪問(wèn)控制的,服務(wù)器的每一個(gè)資源都有相應(yīng)的權(quán)限來(lái)控制,因此用戶執(zhí)行特定的操作時(shí)就必須擁有必要的權(quán)限。管理員必須以角色(Role)的方式將權(quán)限賦予Nexus用戶。例如要訪問(wèn)Nexus界面,就必須擁有Status-(read)這個(gè)權(quán)限,而Nexus默認(rèn)配置的角色UI:Basic UI Privileges就包含了這個(gè)權(quán)限,再將這個(gè)角色分配給某個(gè)用戶,這個(gè)用戶就能訪問(wèn)Nexus界面了。

用戶可以被賦予一個(gè)或者多個(gè)角色,角色可以包含一個(gè)或者多個(gè)權(quán)限,角色還可以包含一個(gè)或者多個(gè)其他角色。

Nexus預(yù)定義了三個(gè)用戶,以admin登錄后,單擊頁(yè)面左邊導(dǎo)航欄中的User鏈接,就能看到所有已定義用戶的列表,如下圖所示:

在這里插入圖片描述

這三個(gè)用戶對(duì)應(yīng)了三個(gè)權(quán)限級(jí)別:

  • admin:該用戶擁有對(duì)Nexus服務(wù)的完全控制,默認(rèn)密碼為admin123。
  • deployment:該用戶能夠訪問(wèn)Nexus,瀏覽倉(cāng)庫(kù)內(nèi)容,搜索,并且上傳部署構(gòu)件,但是無(wú)法對(duì)Nexus進(jìn)行任何配置,默認(rèn)密碼為deployment123。
  • anonymous:該用戶對(duì)應(yīng)了所有未登錄的匿名用戶,它們可以瀏覽倉(cāng)庫(kù)并進(jìn)行搜索。

理解各個(gè)角色的意義對(duì)于權(quán)限管理至關(guān)重要。Nexus預(yù)定義的一些常用且重要的角色包括:

  • UI:Basic UI Privileges:包含了訪問(wèn)Nexus界面必須的最基本的權(quán)限。
  • UI:Repository Browser:包含了瀏覽倉(cāng)庫(kù)頁(yè)面所需要的權(quán)限。
  • UI:Search:包含了訪問(wèn)快速搜索欄及搜索頁(yè)面所需要的權(quán)限。
  • Repo:All Repositories(Read):給予用戶讀取所有倉(cāng)庫(kù)內(nèi)容的權(quán)限,沒(méi)有倉(cāng)庫(kù)的讀權(quán)限,用戶將無(wú)法在倉(cāng)庫(kù)頁(yè)面上看到實(shí)際的倉(cāng)庫(kù)內(nèi)容,也無(wú)法使用Maven從倉(cāng)庫(kù)下載構(gòu)件。
  • Repo:All Repositories(Full Control):給予用戶完全控制所有倉(cāng)庫(kù)內(nèi)容的權(quán)限。用戶不僅可以瀏覽、下載構(gòu)件,還可以部署構(gòu)件及刪除倉(cāng)庫(kù)內(nèi)容。
  • Nexus包含了一個(gè)特殊的匿名用戶角色(Nexus Anonymous Role),默認(rèn)配置下沒(méi)有登錄的用戶都會(huì)擁有該匿名角色的權(quán)限。這個(gè)匿名用戶角色實(shí)際包含了上述所列角色中,除Repo:All Repositories(Full Control)之外的所有角色所包含的權(quán)限。也就是說(shuō),匿名用戶可以訪問(wèn)基本的Nexus界面、瀏覽倉(cāng)庫(kù)內(nèi)容及搜索構(gòu)件。

除上述角色之外,Nexus還預(yù)定義了很多其他角色,它們往往都對(duì)應(yīng)了一個(gè)Nexus的功能。例如,UI:Logs and Config Files包含了訪問(wèn)系統(tǒng)日志文件及配置文件所需要的權(quán)限。

7.2、為項(xiàng)目分配獨(dú)立的倉(cāng)庫(kù)

在組織內(nèi)部,如果所有項(xiàng)目都部署快照及發(fā)布版構(gòu)件至同樣的倉(cāng)庫(kù),就會(huì)存在潛在的沖突及安全問(wèn)題,我們不想讓項(xiàng)目A的部署影響到項(xiàng)目B,反之亦然。解決的方法就是為每個(gè)項(xiàng)目分配獨(dú)立的倉(cāng)庫(kù),并且只將倉(cāng)庫(kù)的部署、修改和刪除權(quán)限賦予該項(xiàng)目的成員,其他用戶只能讀取、下載和搜索該倉(cāng)庫(kù)的內(nèi)容。

假設(shè)項(xiàng)目名稱為foo,首先為該項(xiàng)目建立兩個(gè)宿主倉(cāng)庫(kù)Foo Snapshots和Foo Releases,分別用來(lái)部署快照構(gòu)件和發(fā)布構(gòu)件。

在這里插入圖片描述

有了倉(cāng)庫(kù)之后,就需要?jiǎng)?chuàng)建基于倉(cāng)庫(kù)的增、刪、改、查權(quán)限。在Nexus中,這樣的權(quán)限是基于Repository Target建立的,Repository Target實(shí)際上是一系列正則表達(dá)式,在訪問(wèn)倉(cāng)庫(kù)某路徑下內(nèi)容的時(shí)候,Nexus會(huì)將倉(cāng)庫(kù)路徑與Repository Target的正則表達(dá)式一一匹配,以檢查權(quán)限是否正確。

單擊左邊導(dǎo)航欄中的Repository Targets鏈接,就能看到下圖所示的頁(yè)面。圖中選中了All(Maven2)這一Repository Target,在下方可以看到它包含了一個(gè)值為“.*”的正則表達(dá)式,表示該Repository Target能夠匹配倉(cāng)庫(kù)下的任何路徑。

在這里插入圖片描述

下一步就是基于該Repository Target和Foo Releases、Foo Snapshots兩個(gè)倉(cāng)庫(kù)建立權(quán)限。單擊頁(yè)面左邊導(dǎo)航欄中的Privileges鏈接進(jìn)入權(quán)限頁(yè)面,然后單擊Add按鈕,選擇Repository Target Privilege。下圖所示為創(chuàng)建對(duì)應(yīng)于Foo Releases的權(quán)限。

在這里插入圖片描述

上圖中選擇了Foo Releases倉(cāng)庫(kù)和All(Maven2),表示創(chuàng)建匹配Foo Releases倉(cāng)庫(kù)任何路徑的權(quán)限。單擊Save按鈕之后,就能在權(quán)限列表中看到相應(yīng)的增、刪、改、查權(quán)限,如下圖所示:

在這里插入圖片描述

然后,遵循同樣的步驟,為Foo Snapshots建立增、刪、改、查權(quán)限。

下一步是創(chuàng)建一個(gè)包含上述權(quán)限的角色。單擊導(dǎo)航欄中的Roles進(jìn)入角色頁(yè)面,再單擊頁(yè)面上方的Add按鈕并選擇Nexus Role。下圖所示為將之前建立的權(quán)限加入到該角色中。

在這里插入圖片描述

角色創(chuàng)建完成之后,根據(jù)需要將其分配給Foo項(xiàng)目的團(tuán)隊(duì)成員。這樣,其他團(tuán)隊(duì)的成員默認(rèn)只能讀取Foo Releases和Foo Snapshots的內(nèi)容,而擁有Foo Deployer角色的用戶就可以執(zhí)行部署構(gòu)件等操作。

8、Nexus的調(diào)度任務(wù)

Nexus提供了一系列可配置的調(diào)度任務(wù)來(lái)方便用戶管理系統(tǒng)。用戶可以設(shè)定這些任務(wù)運(yùn)行的方式,例如每天、每周、手動(dòng)等。調(diào)度任務(wù)會(huì)在適當(dāng)?shù)臅r(shí)候在后臺(tái)運(yùn)行。當(dāng)然,用戶還是能夠在界面觀察它們的狀態(tài)的。

要建立一個(gè)調(diào)度任務(wù),單擊左邊導(dǎo)航欄中的Scheduled Tasks鏈接,然后在右邊的界面上方單擊Add按鈕,接著就能看到下圖所示的界面。用戶可以根據(jù)自己的需要,選擇任務(wù)類型,并配置其運(yùn)行方式。

在這里插入圖片描述

Nexus包含了以下幾種類型的調(diào)度任務(wù):

  • Download Indexes:為代理倉(cāng)庫(kù)下載遠(yuǎn)程索引。
  • Empty Trash:清空Nexus的回收站,一些操作(如刪除倉(cāng)庫(kù)文件)實(shí)際是將文件移到了回收站中。
  • Evict Unused Proxied Items From Repository Caches:刪除代理倉(cāng)庫(kù)中長(zhǎng)期未被使用的構(gòu)件緩存。
  • Expire Repository Caches:Nexus為代理倉(cāng)庫(kù)維護(hù)了遠(yuǎn)程倉(cāng)庫(kù)的信息以避免不必要的網(wǎng)絡(luò)流量,該任務(wù)清空這些信息以強(qiáng)制Nexus去重新獲取遠(yuǎn)程倉(cāng)庫(kù)的信息。
  • Publish Indexes:將倉(cāng)庫(kù)索引發(fā)布成可供m2eclipse和其他Nexus使用的格式。
  • Purge Nexus Timeline:刪除Nexus的時(shí)間線文件,該文件用于建立系統(tǒng)的RSS源。
  • Rebuild Maven Metadata Files:基于倉(cāng)庫(kù)內(nèi)容重新創(chuàng)建倉(cāng)庫(kù)元數(shù)據(jù)文件maven-meta-data.xml,同時(shí)重新創(chuàng)建每個(gè)文件的校驗(yàn)和md5和sha1。
  • Reindex Repositories:為倉(cāng)庫(kù)編纂索引。
  • Remove Snapshots From Repository:以可配置的方式刪除倉(cāng)庫(kù)的快照構(gòu)件。
  • Synchronize Shadow Repository:同步虛擬倉(cāng)庫(kù)的內(nèi)容(服務(wù)于Maven 1)。

9、其他私服軟件

Nexus不是唯一的Maven私服軟件,用戶還有另外兩個(gè)選擇,它們分別為Apache的Archiva與JFrog的Artifactory。

Archiva可能是歷史最長(zhǎng)的Maven私服軟件,它早在2005年就作為Apache Maven的一個(gè)子項(xiàng)目存在,到2008年3月成為了Apache軟件基金會(huì)的頂級(jí)項(xiàng)目。

大家可以訪問(wèn)http://archiva.apache.org以具體了解Archiva,其站點(diǎn)提供了一些入門指南及郵件列表等信息。Archiva的下載地址為http://archiva.apache.org/download.html。

10、總結(jié)

建立并維護(hù)自己的私服是使用Maven必不可少的一步,Maven私服軟件有Nexus、Archiva和Artifactory,它們都提供了開源的版本供用戶下載。我們?cè)敿?xì)介紹了Nexus的安裝和使用,包括如何分辨各種類型的倉(cāng)庫(kù)、如何建立倉(cāng)庫(kù)索引和搜索構(gòu)件、如何使用權(quán)限管理功能、如何使用調(diào)度任務(wù)功能等。除了這些功能之外,Nexus還有很多有趣的特性,如RSS源、日志瀏覽及配置等,用戶可以從友好的界面中學(xué)習(xí)使用。

除了Nexus本身,我們還詳述了如何配置Maven從私服下載構(gòu)件,以及如何發(fā)布構(gòu)件至私服供他人使用。結(jié)合了Nexus的幫助之后,再使用Maven時(shí)就會(huì)如虎添翼。

到此這篇關(guān)于Maven使用Nexus創(chuàng)建私服的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Maven Nexus創(chuàng)建私服內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何使用?Spring?Boot?搭建?WebSocket?服務(wù)器實(shí)現(xiàn)多客戶端連接

    如何使用?Spring?Boot?搭建?WebSocket?服務(wù)器實(shí)現(xiàn)多客戶端連接

    本文介紹如何使用SpringBoot快速搭建WebSocket服務(wù)器,實(shí)現(xiàn)多客戶端連接和消息廣播,WebSocket協(xié)議提供全雙工通信,SpringBoot通過(guò)@ServerEndpoint簡(jiǎn)化配置,支持實(shí)時(shí)消息推送,適用于聊天室或通知系統(tǒng)等應(yīng)用場(chǎng)景
    2024-11-11
  • 通過(guò)實(shí)例解析Spring Ioc項(xiàng)目實(shí)現(xiàn)過(guò)程

    通過(guò)實(shí)例解析Spring Ioc項(xiàng)目實(shí)現(xiàn)過(guò)程

    這篇文章主要介紹了Spring Ioc項(xiàng)目實(shí)踐過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 簡(jiǎn)單了解Java程序運(yùn)行整體流程

    簡(jiǎn)單了解Java程序運(yùn)行整體流程

    這篇文章主要介紹了簡(jiǎn)單了解Java程序運(yùn)行整體流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 關(guān)于Springboot+gateway整合依賴并處理依賴沖突問(wèn)題

    關(guān)于Springboot+gateway整合依賴并處理依賴沖突問(wèn)題

    這篇文章主要介紹了Springboot+gateway整合依賴并處理依賴沖突問(wèn)題,給大家提到了spring boot版本和spring cloud版本,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • springboot接入mq的方法示例

    springboot接入mq的方法示例

    本文主要介紹了springboot接入mq的方法示例,主要實(shí)現(xiàn)配置以及實(shí)現(xiàn)一個(gè)簡(jiǎn)單的發(fā)送、接收消息的例子,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Java讀寫文件方法總結(jié)(推薦)

    Java讀寫文件方法總結(jié)(推薦)

    下面小編就為大家?guī)?lái)一篇Java讀寫文件方法總結(jié)(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-05-05
  • Java實(shí)現(xiàn)Executors類創(chuàng)建常見線程池

    Java實(shí)現(xiàn)Executors類創(chuàng)建常見線程池

    本文主要介紹了Java實(shí)現(xiàn)Executors類創(chuàng)建常見線程池,在Java中,可以通過(guò)Executors工廠類提供四種常見類型的線程池,下面就來(lái)介紹一下這四種的方法實(shí)現(xiàn),感興趣的可以了解一下
    2023-11-11
  • 復(fù)雜JSON字符串轉(zhuǎn)換為Java嵌套對(duì)象的實(shí)現(xiàn)

    復(fù)雜JSON字符串轉(zhuǎn)換為Java嵌套對(duì)象的實(shí)現(xiàn)

    這篇文章主要介紹了復(fù)雜JSON字符串轉(zhuǎn)換為Java嵌套對(duì)象的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Mybatis 實(shí)現(xiàn)打印sql語(yǔ)句的代碼

    Mybatis 實(shí)現(xiàn)打印sql語(yǔ)句的代碼

    這篇文章主要介紹了Mybatis 實(shí)現(xiàn)打印sql語(yǔ)句的代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 詳解Spring Security中獲取當(dāng)前登錄用戶的詳細(xì)信息的幾種方法

    詳解Spring Security中獲取當(dāng)前登錄用戶的詳細(xì)信息的幾種方法

    本文主要介紹了詳解Spring Security中獲取當(dāng)前登錄用戶的詳細(xì)信息的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05

最新評(píng)論