中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

長(zhǎng)沙做網(wǎng)站推廣哪家好惠州網(wǎng)站制作推廣

長(zhǎng)沙做網(wǎng)站推廣哪家好,惠州網(wǎng)站制作推廣,wordpress 圖片大小,政府網(wǎng)官網(wǎng)Maven 使用 Nexus 創(chuàng)建私服 1?? Nexus簡(jiǎn)介2?? 安裝 Nexus2.1 下載 Nexus2.2 Bundle 方式安裝 Nexus2.3 WAR 方式安裝 Nexus2.4 登錄 Nexus 3?? Nexus 的倉(cāng)庫(kù)與倉(cāng)庫(kù)組3.1 Nexus 內(nèi)置的倉(cāng)庫(kù)3.2 Nexus 倉(cāng)庫(kù)分類的概念3.3 創(chuàng)建 Nexus 宿主倉(cāng)庫(kù)3.4 創(chuàng)建 Nexus 代理倉(cāng)庫(kù)3.5 創(chuàng)…

Maven · 使用 Nexus 創(chuàng)建私服

  • 1?? Nexus簡(jiǎn)介
  • 2?? 安裝 Nexus
      • 2.1 下載 Nexus
      • 2.2 Bundle 方式安裝 Nexus
      • 2.3 WAR 方式安裝 Nexus
      • 2.4 登錄 Nexus
  • 3?? Nexus 的倉(cāng)庫(kù)與倉(cāng)庫(kù)組
      • 3.1 Nexus 內(nèi)置的倉(cāng)庫(kù)
      • 3.2 Nexus 倉(cāng)庫(kù)分類的概念
      • 3.3 創(chuàng)建 Nexus 宿主倉(cāng)庫(kù)
      • 3.4 創(chuàng)建 Nexus 代理倉(cāng)庫(kù)
      • 3.5 創(chuàng)建 Nexus 倉(cāng)庫(kù)組
  • 4?? Nexus 的索引與構(gòu)件搜索
  • 5?? 配置 Maven從 Nexus下載構(gòu)件
  • 6?? 部署構(gòu)件至 Nexus
      • 6.1 使用 Maven 部署構(gòu)件至 Nexus
      • 6.2 手動(dòng)部署第三方構(gòu)件至 Nexus
  • 7?? Nexus 的權(quán)限管理
      • 7.1 Nexus 的訪問(wèn)控制模型
      • 7.2 為項(xiàng)目分配獨(dú)立的倉(cāng)庫(kù)
  • 8?? Nexus的調(diào)度任務(wù)
  • 9?? 其他私服軟件
  • 🌾 總結(jié)

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

有三種專門的Maven 倉(cāng)庫(kù)管理軟件可以用來(lái)幫助大家建立私服: Apache 基金會(huì)的Archiva、JFrog 的 Artifactory 和 Sonatype 的 Nexus。 其中, Archiva 是開源的,而 ArtifactoryNexus 的核心也是開源的,因此大家可以自由選擇使用。個(gè)人比較推崇 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ū)收到了大量反饋和幫助,現(xiàn)在 Nexus 已經(jīng)發(fā)布到了 3.60.0 版本,它也正健康快速地成長(zhǎng)著。Nexus分為開源版和專業(yè)版,其中開源版本基于GPLx3 許可證,其特性足以滿足大部分 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)該地址了解詳情:
https://help.sonatype.com/repomanager3/product-information/download

2?? 安裝 Nexus

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

2.1 下載 Nexus

首先從 Nexus下載地址 下載最新版本的 Nexus。大家可以根據(jù)需要下載對(duì)應(yīng)安裝包 nexus-3.60.0-02-win64.zip (Windows系統(tǒng)) 、nexus-3.60.0-02-unix.tar.gz(Linux系統(tǒng))或者 nexus-3.60.0-02-mac.tgz (MAC系統(tǒng))。

2.2 Bundle 方式安裝 Nexus

2.X 舊版本的 Nexus 是 Bundle 安裝包,所以本節(jié)介紹下這種安裝包的安裝方式。Bundle 自帶了Jetty 容器,因此用戶不需要額外的Web 容器就能直接啟動(dòng) Nexus。首
先將 Bundle 文件解壓,解壓后會(huì)得到如下兩個(gè)子目錄:

在這里插入圖片描述

  • nexus-xxx/:該目錄包含了Nexus 運(yùn)行所需要的文件,如啟動(dòng)腳本、依賴
    jar包等。
  • sonatype-work/:該目錄包含Nexus 生成的配置文件、日志文件、倉(cāng)庫(kù)文件等。

其中,第一個(gè)目錄是運(yùn)行Nexus 所必需的,而且所有相同版本 Nexus實(shí)例所包含的該目錄內(nèi)容都是一樣的。而第二個(gè)目錄不是必須的, Nexus 會(huì)在運(yùn)行的時(shí)候動(dòng)態(tài)創(chuàng)建該目錄,不過(guò)它的內(nèi)容對(duì)于各個(gè)Nexus 實(shí)例是不一樣的,因?yàn)椴煌脩粼诓煌瑱C(jī)器上使用的 Nexus 會(huì)有不同的配置和倉(cāng)庫(kù)內(nèi)容。當(dāng)用戶需要備份 Nexus 的時(shí)候,默認(rèn)備份sonatype-work/目錄,因?yàn)樵撃夸?包含了用戶特定的內(nèi)容,而 nexus-xxx 目錄下的內(nèi)容是可以從安裝包直接獲得的。

用戶只需要調(diào)用對(duì)應(yīng)操作系統(tǒng)的腳本就可以啟動(dòng) Nexus, 這里介紹主流的在 Windows 和 Linux 平臺(tái)上啟動(dòng) Nexus 的方式。

在 Windows 操作系統(tǒng)上,用戶需進(jìn)入 nexus-xxx/bin/jsw/windows-x86-32/ 子目錄,然后直接運(yùn)行 start-nexus.bat 腳本就能啟動(dòng) Nexus。運(yùn)行 console-nexus.bat 腳本,如果看到如下輸出(部分日志已省略),就說(shuō)明啟動(dòng)成功了:

wrapper  | --> Wrapper Started as Console
wrapper  | Launching a JVM...
jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
jvm 1    |
...
jvm 1    | 2023-09-27 15:02:15,539+0800 INFO  [WrapperListener_start_runner]  org.sonatype.nexus.bootstrap.ConfigurationBuilder -   application-host='0.0.0.0'
jvm 1    | 2023-09-27 15:02:15,539+0800 INFO  [WrapperListener_start_runner]  org.sonatype.nexus.bootstrap.ConfigurationBuilder -   application-port='8081'
jvm 1    | 2023-09-27 15:02:15,539+0800 INFO  [WrapperListener_start_runner]  org.sonatype.nexus.bootstrap.ConfigurationBuilder -   bundleBasedir='D:\MyApp\nexus-2.14.5-02-bundle\nexus-2.14.5-02'
jvm 1    | 2023-09-27 15:02:15,540+0800 INFO  [WrapperListener_start_runner]  org.sonatype.nexus.bootstrap.ConfigurationBuilder -   java.awt.headless='true'
jvm 1    | 2023-09-27 15:02:15,540+0800 INFO  [WrapperListener_start_runner]  org.sonatype.nexus.bootstrap.ConfigurationBuilder -   networkaddress.cache.ttl='3600'
jvm 1    | 2023-09-27 15:02:15,540+0800 INFO  [WrapperListener_start_runner]  org.sonatype.nexus.bootstrap.ConfigurationBuilder -   nexus-app='D:\MyApp\nexus-2.14.5-02-bundle\nexus-2.14.5-02/nexus/WEB-INF'
jvm 1    | 2023-09-27 15:02:15,540+0800 INFO  [WrapperListener_start_runner]  org.sonatype.nexus.bootstrap.ConfigurationBuilder -   nexus-webapp='D:\MyApp\nexus-2.14.5-02-bundle\nexus-2.14.5-02/nexus'
jvm 1    | 2023-09-27 15:02:15,540+0800 INFO  [WrapperListener_start_runner]  org.sonatype.nexus.bootstrap.ConfigurationBuilder -   nexus-webapp-context-path='/nexus'
jvm 1    | 2023-09-27 15:02:15,540+0800 INFO  [WrapperListener_start_runner]  org.sonatype.nexus.bootstrap.ConfigurationBuilder -   nexus-work='D:\MyApp\nexus-2.14.5-02-bundle\sonatype-work\nexus'
jvm 1    | 2023-09-27 15:02:15,540+0800 INFO  [WrapperListener_start_runner]  org.sonatype.nexus.bootstrap.ConfigurationBuilder -   org.eclipse.ecf.provider.filetransfer.retrieve.readTimeout='30000'
...
jvm 1    | 2023-09-27 15:02:18,253+0800 INFO  [jetty-main-1]  org.sonatype.nexus.NxApplication -
jvm 1    | -------------------------------------------------
jvm 1    |
jvm 1    | Initializing Nexus Repository Manager OSS 2.14.5-02
jvm 1    |
jvm 1    | -------------------------------------------------
jvm 1    | 2023-09-27 15:02:18,254+0800 INFO  [jetty-main-1]  org.sonatype.nexus.NxApplication - Activating locally installed plugins...
jvm 1    | 2023-09-27 15:02:20,817+0800 INFO  [jetty-main-1]  com.sun.jersey.server.impl.application.WebApplicationImpl - Initiating Jersey application, version 'Jersey: 1.17.1 02/28/2013 12:47 PM'
jvm 1    | 2023-09-27 15:02:22,051+0800 INFO  [jetty-main-1]  org.sonatype.nexus.plugins.bcprov.CryptoPlugin - Unlimited strength JCE policy detected
jvm 1    | 2023-09-27 15:02:23,794+0800 INFO  [jetty-main-1]  org.sonatype.nexus.kazuki.KazukiPlugin - Kazuki version: 0.1.8
jvm 1    | 2023-09-27 15:02:26,272+0800 INFO  [jetty-main-1]  org.sonatype.nexus.proxy.registry.DefaultRepositoryTypeRegistry - Registered Repository type RepositoryType=(org.sonatype.nexus.proxy.repository.WebSiteRepository:site).
jvm 1    | 2023-09-27 15:02:26,566+0800 INFO  [jetty-main-1]  org.sonatype.nexus.proxy.registry.DefaultRepositoryTypeRegistry - Registered Repository type RepositoryType=(org.sonatype.nexus.proxy.repository.GroupRepository:npm-group).
jvm 1    | 2023-09-27 15:02:26,566+0800 INFO  [jetty-main-1]  org.sonatype.nexus.proxy.registry.DefaultRepositoryTypeRegistry - Registered Repository type RepositoryType=(org.sonatype.nexus.proxy.repository.Repository:npm-hosted).
jvm 1    | 2023-09-27 15:02:26,566+0800 INFO  [jetty-main-1]  org.sonatype.nexus.proxy.registry.DefaultRepositoryTypeRegistry - Registered Repository type RepositoryType=(org.sonatype.nexus.proxy.repository.Repository:npm-proxy).
jvm 1    | 2023-09-27 15:02:26,691+0800 INFO  [jetty-main-1]  org.sonatype.nexus.proxy.registry.DefaultRepositoryTypeRegistry - Registered Repository type RepositoryType=(org.sonatype.nexus.proxy.repository.ShadowRepository:nuget-shadow).
jvm 1    | 2023-09-27 15:02:26,691+0800 INFO  [jetty-main-1]  org.sonatype.nexus.proxy.registry.DefaultRepositoryTypeRegistry - Registered Repository type RepositoryType=(org.sonatype.nexus.proxy.repository.GroupRepository:nuget-group).
jvm 1    | 2023-09-27 15:02:26,691+0800 INFO  [jetty-main-1]  org.sonatype.nexus.proxy.registry.DefaultRepositoryTypeRegistry - Registered Repository type RepositoryType=(org.sonatype.nexus.proxy.repository.Repository:nuget-proxy).
jvm 1    | 2023-09-27 15:02:29,092+0800 INFO  [jetty-main-1]  org.sonatype.nexus.proxy.registry.DefaultRepositoryTypeRegistry - Registered Repository type RepositoryType=(org.sonatype.nexus.proxy.repository.GroupRepository:rubygems-group).
jvm 1    | 2023-09-27 15:02:29,092+0800 INFO  [jetty-main-1]  org.sonatype.nexus.proxy.registry.DefaultRepositoryTypeRegistry - Registered Repository type RepositoryType=(org.sonatype.nexus.proxy.repository.Repository:rubygems-hosted).
jvm 1    | 2023-09-27 15:02:29,092+0800 INFO  [jetty-main-1]  org.sonatype.nexus.proxy.registry.DefaultRepositoryTypeRegistry - Registered Repository type RepositoryType=(org.sonatype.nexus.proxy.repository.Repository:rubygems-proxy).
jvm 1    | 2023-09-27 15:02:30,490+0800 INFO  [jetty-main-1]  org.sonatype.nexus.NxApplication - Plugin manager request "ACTIVATE" on plugin "org.sonatype.nexus.plugins:nexus-atlas-plugin:2.14.5-02" was successful.
...
jvm 1    | 2023-09-27 15:02:31,175+0800 INFO  [jetty-main-1]  org.sonatype.nexus.orient.DatabaseServerImpl - Activated
jvm 1    | 2023-09-27 15:02:31,175+0800 INFO  [jetty-main-1]  org.sonatype.nexus.configuration.application.DefaultNexusConfiguration - Loading Nexus Configuration...
jvm 1    | 2023-09-27 15:02:31,183+0800 INFO  [jetty-main-1]  org.sonatype.nexus.configuration.source.StaticConfigurationSource - Configuration loaded successfully.
...

這時(shí),打開瀏覽器訪問(wèn) http://localhost:8081/nexus/ 就能看到 Nexus 的界面,如圖所示。

在這里插入圖片描述

要停止 Nexus, 可以在命令行按 Clrl+C 鍵。在 nexus-xxx/bin/jsw/windows-x86-32/ 目錄下還有其他一些腳本:

  • install-nexus.bat:將 Nexus 安裝成 Windows 服務(wù)。
  • uninstall-nexus.bat:卸載 Nexus Windows 服務(wù)。
  • start-nexus.bat:啟動(dòng) Nexus Windows 服務(wù)。
  • stop-nexus.bat:停止 Nexus Windows 服務(wù)。
  • pause-nexus.bat:暫停 Nexus Windows 服務(wù)。
  • resume-nexus.bat:恢復(fù)暫停的 Nexus Windows 服務(wù)。

借助 Windows 服務(wù),用戶就可以讓 Nexus 伴隨著 Windows 自動(dòng)啟動(dòng),非常方便。

在Linux系統(tǒng)上啟動(dòng) Nexus也非常方便,例如使用 Ubuntu32位系統(tǒng),那么只需要進(jìn)入到nexus-xxx/bin/jsw/linux-x86-32/,然后運(yùn)行如下命令:

$ . /nexus console

同樣地,讀者可以看到 Nexus啟動(dòng)的命令行輸出,并且可以使用 Ctrl+C鍵停止 Nexus。
除了console之外,Nexus的Linux腳本還提供如下的命令:

  • ./nexus start: 在后臺(tái)啟動(dòng) Nexus服務(wù)。
  • ./nexus stop: 停止后臺(tái)的 Nexus服務(wù)。
  • ./nexus status: 查看后臺(tái) Nexus服務(wù)的狀態(tài)。
  • ./nexus restart: 重新啟動(dòng)后臺(tái)的Nexus服務(wù)。

關(guān)于Bundle 安裝的一個(gè)常見(jiàn)問(wèn)題是端口沖突。Nexus Bundle默認(rèn)使用的端口是8081,
如果該端口已經(jīng)被其他應(yīng)用程序占用,或者你想使用80端口開放Nexus服務(wù),則編輯文件 nexus-xxx/conf/nexus.properties, 找到屬性 application-port, 按需要將默認(rèn)值 8081改成其他端口號(hào),然后保存該文件,重啟Nexus便可。

在這里插入圖片描述

2.3 WAR 方式安裝 Nexus

除了 Bundle, Nexus還提供一個(gè)可以直接部署到Web容器中的war包。該war包支持主流的Web容器,如Tomcat、Glassfish、Jetty 和 Resin。

以Tomcat6為例,我在 Vista機(jī)器上的目錄為 D:\bin\apache-tomcat-6.0.20\, 那么只需要復(fù)制 Nexus war包至 Tomcat的部署目錄 D:\bin\apache-tomcat-6.0.20\webapps\nexus.war, 然后轉(zhuǎn)到 D:\bin\apache-tomcat-6.0.20\bin\目錄,運(yùn)行腳本 startup.bat。這時(shí),便可以從Tomcat的 console輸出中看到它部署nexus.war。
待Tomcat啟動(dòng)完成后,訪問(wèn) http://localhost:8080/nexus/ 就能看到Nexus的界面了。

2.4 登錄 Nexus

Nexus擁有全面的權(quán)限控制功能,默認(rèn)的Nexus訪問(wèn)都是匿名的,而匿名用戶僅包含一些 最基本的權(quán)限,要全面學(xué)習(xí)和管理Nexus, 就必須以管理員方式登錄??梢詥螕艚缑嬗疑辖堑?Log In進(jìn)行登錄, Nexus的默認(rèn)管理員用戶名和密碼為 admin/admin123, 如圖所示。
在這里插入圖片描述

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 (代理) 和 vitual (虛擬)。每個(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ù)的用途,maven1 格式的倉(cāng)庫(kù)暫時(shí)省略。此外,由于虛擬類型倉(cāng)庫(kù)的作用實(shí)際上是動(dòng)態(tài)地將倉(cāng)庫(kù)內(nèi)容格式轉(zhuǎn)換,換言之也是為了服務(wù) maven1 格式,因此省略。

  • Maven Central: 該倉(cāng)庫(kù)代理 Maven 中央倉(cāng)庫(kù),其策略為Release, 因此只會(huì)下載和緩 存中央倉(cāng)庫(kù)中的發(fā)布版本構(gòu)件。
  • Releases: 一個(gè)策略為Release 的宿主類型倉(cāng)庫(kù),用來(lái)部署組織內(nèi)部的發(fā)布版本構(gòu)件。
  • Snapshots: 一個(gè)策略為Snapshot 的宿主類型倉(cāng)庫(kù),用來(lái)部署組織內(nèi)部的快照版本構(gòu)件。
  • 3rd party: 一個(gè)策略為Release 的宿主類型倉(cāng)庫(kù),用來(lái)部署無(wú)法從公共倉(cāng)庫(kù)獲得的第三方發(fā)布版本構(gòu)件。
  • Apache Snapshots: 一個(gè)策略為Snapshot 的代理倉(cāng)庫(kù),用來(lái)代理Apache Maven倉(cāng)庫(kù)的快照版本構(gòu)件。
  • Codehaus Snapshots: 一個(gè)策略為Snapshot 的代理倉(cāng)庫(kù),用來(lái)代理 Codehaus Maven 倉(cāng)庫(kù)的快照版本構(gòu)件。
  • Google Code: 一個(gè)策略為 Release 的代理倉(cāng)庫(kù),用來(lái)代理 Google Code Maven 倉(cāng)庫(kù)的發(fā)布版本構(gòu)件。
  • java.net-Maven 2: 一個(gè)策略為Release 的代理倉(cāng)庫(kù),用來(lái)代理 java.net Maven 倉(cāng)庫(kù)的發(fā)布版本構(gòu)件。
  • Public Repositories: 該侖庫(kù)組將上述所有策略為 Release 的倉(cāng)庫(kù)聚合并通過(guò)一致的地 址提供服務(wù)。
  • Public Snapshot Repositories: 該倉(cāng)庫(kù)組將上述所有策略為Snapshot 的倉(cāng)庫(kù)聚合并通過(guò)一致的地址提供服務(wù)。

舉一個(gè)簡(jiǎn)單的例子。假設(shè)某公司建立了Maven 項(xiàng)目X, 公司內(nèi)部建立了Nexus 私服,為 所有 Maven 項(xiàng)目提供服務(wù)。項(xiàng)目X 依賴于很多流行的開源類庫(kù)如 JUnit 等,這些構(gòu)件都能從 Maven 中央倉(cāng)庫(kù)獲得,因此 Maven Central 代理倉(cāng)庫(kù)會(huì)被用來(lái)代理中央倉(cāng)庫(kù)的內(nèi)容,并在私服上緩存下來(lái), X 還依賴于某個(gè) Google Code的項(xiàng)目,其構(gòu)件在中央倉(cāng)庫(kù)中不存在,只存在于Google Code的倉(cāng)庫(kù)中,因此上述列表中的 Google Cole 代理倉(cāng)庫(kù)會(huì)被用來(lái)代理并緩存這樣的構(gòu)件。

X 還依賴于 Oracle的 JDBC 驅(qū)動(dòng),由于版權(quán)的因素,該類庫(kù)無(wú)法從公共倉(cāng)庫(kù)獲得, 因此公司管理員將其部署到 3rd party宿主倉(cāng)庫(kù)中,供X 使用。 X 的快照版本構(gòu)件成功后,會(huì)被部署到 Snapshots 宿主倉(cāng)庫(kù)中,供其他項(xiàng)目使用。當(dāng)X 發(fā)布正式版本的時(shí)候,其構(gòu)件會(huì)被部署到 Release宿主倉(cāng)庫(kù)中。由于X 用到了上述列表中的很多倉(cāng)庫(kù),為每個(gè)倉(cāng)庫(kù)聲明 Maven 配置又比較麻煩,因此可以直接使用倉(cāng)庫(kù)組 Publie Repositories 和 Public Snapshot Repositories, 當(dāng) X 需要 JUnit的時(shí)候,它直接從 Public Repositories 下載,Public Repositories會(huì)選擇 Maven Central 提供實(shí)際的內(nèi)容。

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)建 Nexus 宿主倉(cāng)庫(kù)

要?jiǎng)?chuàng)建一個(gè)宿主倉(cāng)庫(kù),首先單擊界面左邊導(dǎo)航欄中的Repositories鏈接,在右邊的面板中,選擇Add, 接著在下拉菜單中選擇 Hosted Repository, 就會(huì)看到圖示的配置界面。

在這里插入圖片描述
根據(jù)自己的需要填入倉(cāng)庫(kù)的 ID 和名稱,下一字段Repository Type 表示該倉(cāng)庫(kù)的類型。 Provider用來(lái)確定該倉(cāng)庫(kù)的格式。 一般來(lái)說(shuō),選擇默認(rèn)的 Maven2 Repository。 然后是 Repository Policy, 可以根據(jù)自己的需要來(lái)配置該倉(cāng)庫(kù)是發(fā)布版構(gòu)件倉(cāng)庫(kù)還是快照版構(gòu)件倉(cāng)庫(kù)。 Default Local Stornge Location表示該倉(cāng)庫(kù)的默認(rèn)存儲(chǔ)目錄,圖中該字段的值為空,待倉(cāng)庫(kù)創(chuàng)建好之后,該值就會(huì)成為基于 sonatype-work 的一個(gè)文件路徑,如 sonatype-work/nexus/storage/repository-id/, Override Local Storage Location可以用來(lái)配置自定義的倉(cāng)庫(kù)目錄位置。

Access Settings小組中, Deployment Policy 用來(lái)配置該倉(cāng)庫(kù)的部署策略,選項(xiàng)有只讀 (禁止部署)、關(guān)閉重新部署(同一構(gòu)件只能部署一次)以及允許重新部署。 Allow File Browsing表示是否允許瀏覽倉(cāng)庫(kù)內(nèi)容, 一般選True。 每個(gè)倉(cāng)庫(kù)(包括代理倉(cāng)庫(kù)和倉(cāng)庫(kù)組) 都有一個(gè)Browse Storage 選項(xiàng)卡,用戶以樹形結(jié)構(gòu)瀏覽倉(cāng)庫(kù)存儲(chǔ)文件的內(nèi)容,如下圖所示。

在這里插入圖片描述

Include in Search 表示是否對(duì)該倉(cāng)庫(kù)進(jìn)行索引并提供搜索,我們會(huì)在后面文章詳細(xì)討論索 引和搜索。 Publish URL 用來(lái)控制是否通過(guò)URL 提供服務(wù),如果選 False, 當(dāng)訪問(wèn)該倉(cāng)庫(kù)的地址時(shí),會(huì)得到 HTTP 404 Not Found 錯(cuò)誤。配置中最后的 Not Found Cache TTL表示當(dāng)一個(gè)文件沒(méi)有找到后,緩存這一不存在信息的時(shí)間。以默認(rèn)值1440分鐘為例,如果某文件不存在,那么在之后的1440分鐘內(nèi),如果 Nexus 再次得到該文件的請(qǐng)求,它將直接返回不存在信息,而不會(huì)查找文件系統(tǒng)。這么做是為了避免重復(fù)的文件查找操作以提升性能。

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

首先單擊界面左邊導(dǎo)航欄中的 Repositories 鏈接,在右邊的面板中,選擇 Add..., 接著在下拉菜單中選擇 Proxy Repository, 就會(huì)看到如圖所示的配置界面。

在這里插入圖片描述
倉(cāng)庫(kù)的ID、 名稱、Provider、Format、Policy、 默認(rèn)本地存儲(chǔ)位置和覆蓋本地存儲(chǔ)位置等 配置前面都已提過(guò),這里不再贅述。需要注意的是,這里的 Repository Type 的值為 proxy。

對(duì)于代理倉(cāng)庫(kù)來(lái)說(shuō),最重要的是遠(yuǎn)程倉(cāng)庫(kù)的地址,即 Remote Storage Location,用戶必須在這里輸入有效的值。 Download Remote Indexes 表示是否下載遠(yuǎn)程倉(cāng)庫(kù)的索引,有些遠(yuǎn)程倉(cāng)庫(kù)擁有索引,下載其索引后,即使沒(méi)有緩存遠(yuǎn)程倉(cāng)庫(kù)的構(gòu)件,用戶還是能夠在本地搜索 和瀏覽那些構(gòu)件的基本信息。 Checksum Policy 配置校驗(yàn)和出錯(cuò)時(shí)的策略,用戶可以選擇忽略、記錄警告信息或者拒絕下載。當(dāng)遠(yuǎn)程倉(cāng)庫(kù)需要認(rèn)證的時(shí)候,這里的 Authentication 配置就能派上用處。

Access Settings的配置與宿主倉(cāng)庫(kù)類似,在此不再贅述。 Expiration Settings 較宿主倉(cāng)庫(kù)多了Artifact Max AgeMetadata Max Age。其中,前者表示構(gòu)件緩存的最長(zhǎng)時(shí)間,后者表示 倉(cāng)庫(kù)元數(shù)據(jù)文件緩存的最長(zhǎng)時(shí)間。對(duì)于發(fā)布版?zhèn)}庫(kù)來(lái)說(shuō), Artifact Max Age 默認(rèn)值為 -1 , 表示構(gòu)件緩存后就一直保存著,不再重新下載。對(duì)于快照版?zhèn)}庫(kù)來(lái)說(shuō), Artifact Max Age 默認(rèn)值為1440分鐘,表示每隔一天重新緩存代理的構(gòu)件。

配置中最后兩項(xiàng)為HTTP Request SettingsOverride HTTP Proxy Settings, 其中前者用來(lái)配置Nexus 訪問(wèn)遠(yuǎn)程倉(cāng)庫(kù)時(shí)HTTP 請(qǐng)求的參數(shù),后者用來(lái)配置HTTP 代理。

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

要?jiǎng)?chuàng)建一個(gè)倉(cāng)庫(kù)組,首先單擊界面左邊導(dǎo)航欄中的Repositories 鏈接,在右邊的面板中,選擇Add, 接著在下拉菜單中選擇 Repository Group, 就會(huì)看到圖所示的配置界面。

在這里插入圖片描述
配置中的 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ù)。

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)。

前面文章中介紹過(guò)了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é)果。使用關(guān)鍵字進(jìn)行搜索,可以得到該關(guān)鍵字相關(guān)的結(jié)果,結(jié)果中的每一行都表示了一類構(gòu)件,信息包括Groupld、Artifactld、最新版本以及最新版本的相關(guān)文件下載等。單擊其中的某一行,界面的下端會(huì)浮出一個(gè)更具體的構(gòu)件信息面板。

該面板除了顯示構(gòu)件的坐標(biāo),還包含了一段 XML 依賴聲明,用戶可以直接復(fù)制粘貼到 項(xiàng)目的 POM 中。此外,用戶還能從該面板獲知構(gòu)件在倉(cāng)庫(kù)中的相對(duì)位置。單擊 Artifact Information 還能看到文件具體的大小、更新時(shí)間、 SHA1 和 MD5 校驗(yàn)和以及下載鏈接。除了簡(jiǎn)單的關(guān)鍵字搜索, Nexus 還提供了GAV 搜索、類名搜索和校驗(yàn)和搜索等功能,用戶可以單擊搜索頁(yè)面左上角的下拉菜單選擇高級(jí)搜索功能:

  • GAV 搜索 (GAV Search) 允許用戶通過(guò)設(shè)置 Groupld 、Artifactld 和 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)輸入 Groupld、Artifactld 等信息來(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)。

以上的搜索及瀏覽功能都是基于Nexus 索引而實(shí)現(xiàn)的,確切地應(yīng)該稱之為 nexus-indexer。Nexus 能夠遍歷一個(gè) Maven 倉(cāng)庫(kù)所有的內(nèi)容,搜集它們的坐標(biāo)、校驗(yàn)和及所含的Java 類信息,然后以 nexus-indexer的形式保存起來(lái)。中央倉(cāng)庫(kù)維護(hù)了這樣的一個(gè)nexus-indexer, 因此本地的 Nexus 下載到這個(gè)索引之后,就能在此基礎(chǔ)上提供搜索和瀏覽等服務(wù)。需要注意的是,不是任何一個(gè)公共倉(cāng)庫(kù)都提供 nexus-indexer, 對(duì)于那些不提供索引的倉(cāng)庫(kù)來(lái)說(shuō),我們就無(wú)法對(duì)其進(jìn)行搜索。

除了下載使用遠(yuǎn)程倉(cāng)庫(kù)的索引,我們也能為宿主倉(cāng)庫(kù)和代理倉(cāng)庫(kù)建立索引。只需要在倉(cāng)庫(kù)上右擊,從彈出的快捷菜單中選擇 ReIndex 即可。待索引編纂任務(wù)完成之后,就能搜索該倉(cāng)庫(kù)所包含的構(gòu)件。

對(duì)于宿主倉(cāng)庫(kù)來(lái)說(shuō), ReIndex 任務(wù)會(huì)掃描該倉(cāng)庫(kù)包含的所有構(gòu)件建立索引。對(duì)于代理倉(cāng) 庫(kù)來(lái)說(shuō), Relndex 任務(wù)會(huì)掃描所有緩存的構(gòu)件建立索引,如果遠(yuǎn)程倉(cāng)庫(kù)也有索引,則下載后與本地的索引合并。對(duì)于倉(cāng)庫(kù)組來(lái)說(shuō), Relndex 任務(wù)會(huì)合并其包含的所有倉(cāng)庫(kù)的索引。

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

前面文章中我們已經(jīng)詳細(xì)介紹了如何在 POM 中為Maven 配置倉(cāng)庫(kù)和插件倉(cāng)庫(kù)。例如,當(dāng)需要為項(xiàng)目添加 Nexus私服上的 public倉(cāng)庫(kù)時(shí),可以按以下代碼所示配置。

<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ī)bMaven項(xiàng)目有效,但是settings.xml并不支持直接配置repositoriespluginRepositories。所幸Maven還提供了 Profile機(jī)制,能讓用戶將倉(cāng)庫(kù)配置放到setting.xml中的 Profile中,如代碼所示。

<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></anapshots></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)目中去。關(guān)于Maven Profile, 后面還會(huì)有專門的文章進(jìn)一步介紹。

上面代碼中的配置已經(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í)候就需要借助于前面提到過(guò)的 Maven鏡像配置了。可以創(chuàng)建一個(gè)匹配任何倉(cāng)庫(kù)的鏡像,鏡像的地址為私服,這樣,Maven對(duì)任何倉(cāng)庫(kù)的構(gòu)件下載請(qǐng)求都會(huì)轉(zhuǎn)到私服中。具體配置見(jiàn)代碼:

<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><release><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ù)中。下面代碼列出了一段典型的配置。

<project><distributionManagement><repository><id>nexusreleases</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),定義好坐標(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)行搜索。

在Users頁(yè)面中,管理員還可以添加用戶。單擊上方的Add按鈕,選擇Nexus User,然后在用戶配置面板中配置要添加用戶的 ID、名稱、Email、狀態(tài)、密碼以及包含的角色,最后單擊Save按鈕即可。

可以單擊任何一個(gè)用戶,然后選擇頁(yè)面下方的Role Tree選項(xiàng)卡,以樹形結(jié)構(gòu)詳細(xì)地查看該用戶所包含的角色以及進(jìn)一步的權(quá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 Reposiories(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 SnapshotsFoo Releases, 分別用來(lái)部署快照構(gòu)件和發(fā)布構(gòu)件。具體步驟見(jiàn) 3.3節(jié),這里不再贅述。
有了倉(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 鏈接,選中一個(gè) Repository Target, 在下方可以看到它包含了一個(gè)值為“.*”的正則表達(dá)式,表示該 Repository Target 能夠匹配倉(cāng)庫(kù)下的任何路徑。

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

選擇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 ReleasesFoo 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

在 Nexus發(fā)布之前,筆者曾一度是 Artifactory 的忠實(shí)用戶,當(dāng)時(shí)它是唯一的支持從用戶 界面配置倉(cāng)庫(kù)的私服。 Artifactory 的一大特點(diǎn)是使用數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)倉(cāng)庫(kù)內(nèi)容。讀者可以自行訪問(wèn)JFrog站點(diǎn)以了解更多信息: http://www.jfog.org/products.php。 Artifactory 目前的最新版本為2.2.5, 其下載地址為 http://www.jfrog.org/download.php

🌾 總結(jié)

建立并維護(hù)自己的私服是使用Maven 必不可少的一步,Maven 私服軟件有 Nexus、ArchivaArtifactory, 它們都提供了開源的版本供用戶下載。本文詳細(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ì)如虎添翼。


? 溫習(xí)回顧上一篇(點(diǎn)擊跳轉(zhuǎn))
《【Maven教程】(七)聚合與繼承:多模塊項(xiàng)目實(shí)用特性介紹,反應(yīng)堆構(gòu)建及裁剪 ~》

? 繼續(xù)閱讀下一篇(點(diǎn)擊跳轉(zhuǎn))
《【Maven教程】(九):使用 Maven 進(jìn)行測(cè)試 ~》

http://www.risenshineclean.com/news/29629.html

相關(guān)文章:

  • 湛江網(wǎng)站建設(shè)外包網(wǎng)絡(luò)推廣技巧
  • 鄭州艾特網(wǎng)站建設(shè)營(yíng)銷咨詢服務(wù)
  • 商標(biāo)設(shè)計(jì)logo網(wǎng)站廣州seo優(yōu)化推廣
  • 2018年的網(wǎng)站制作免費(fèi)的行情軟件app網(wǎng)站
  • 網(wǎng)站編程學(xué)習(xí)百度關(guān)鍵詞排名優(yōu)化
  • 滄州建設(shè)網(wǎng)站ip反查域名網(wǎng)站
  • 安徽網(wǎng)站設(shè)計(jì)百度做個(gè)人簡(jiǎn)介多少錢
  • 網(wǎng)站開發(fā)技術(shù)實(shí)驗(yàn)報(bào)告主流搜索引擎有哪些
  • 服裝公司 網(wǎng)站怎么做站長(zhǎng)之家ppt素材
  • 用.net做視頻網(wǎng)站的案例淄博網(wǎng)站推廣
  • 做網(wǎng)站費(fèi)用 優(yōu)幫云網(wǎng)站友情鏈接
  • 做網(wǎng)站要用到什么軟件外貿(mào)seo是啥
  • 我的家鄉(xiāng)網(wǎng)頁(yè)制作代碼寧波seo外包推廣公司
  • 武漢做網(wǎng)站價(jià)格公關(guān)團(tuán)隊(duì)
  • asp網(wǎng)站圖片不顯示附近的教育培訓(xùn)機(jī)構(gòu)有哪些
  • 珠海網(wǎng)站建設(shè)陳玉銘千萬(wàn)不要做手游推廣員
  • wordpress 導(dǎo)購(gòu)主題網(wǎng)絡(luò)推廣seo怎么弄
  • 長(zhǎng)沙網(wǎng)站搜索引擎優(yōu)化鞍山seo優(yōu)化
  • 網(wǎng)站單頁(yè)在線制作軟件網(wǎng)絡(luò)營(yíng)銷與直播電商就業(yè)前景
  • 常州酒店網(wǎng)站建設(shè)代運(yùn)營(yíng)公司排行榜
  • 天柱建設(shè)局網(wǎng)站河南網(wǎng)站關(guān)鍵詞優(yōu)化
  • 訂閱號(hào)怎么做免費(fèi)的視頻網(wǎng)站青島網(wǎng)站seo服務(wù)
  • 瀘縣手機(jī)網(wǎng)站建設(shè)搜搜
  • 江西南昌網(wǎng)站制作seo排名軟件價(jià)格
  • 怎么做挖礦網(wǎng)站google網(wǎng)站登錄入口
  • 建設(shè)網(wǎng)站對(duì)公司起什么作用是什么三一crm手機(jī)客戶端下載
  • wordpress 搭建圖庫(kù)太原seo排名
  • 濟(jì)南手機(jī)網(wǎng)站建設(shè)關(guān)鍵詞拓展工具有哪些
  • 安全的營(yíng)銷型網(wǎng)站制作鄭州百度網(wǎng)站快速優(yōu)化
  • 域名搶注網(wǎng)站建設(shè)關(guān)鍵詞提取工具app