Maven实战(五)- Nexus 私服安装与使用
文章目录
- Maven实战(五)- Nexus 私服安装与使用
- 1.安装Nexus
- 1.1.下载安装包
- 1.2.Nexus启动命令
- 1.3.登陆Nexus
- 2.仓库与仓库组
- 2.1.内置仓库
- 2.2.仓库分类
- 2.3.创建宿主仓库
- 2.4.创建代理仓库
- 2.5.创建仓库组
- 3.配置Maven从Nexus下载构件
- 3.1.项目配置
- 3.2.全局配置
- 4.部署构件至Nexus
- 4.1.手动部署
- 4.2.Maven部署构件
- 5.权限管理
- 5.1.Privileges
- 5.2.Roles
- 5.3.Users
有三种专门的Maven仓库管理软件可以用来帮助大家建立私服:Apache基金会的Archiva、JFrog的Artifactory和Sonatype的Nexus。
- Sonatype Nexus: Sonatype Nexus是一个功能强大的Maven仓库管理软件,支持Maven、Gradle、Ivy等构建工具。它提供了统一的仓库管理平台,具备缓存、代理、分发、安全控制等功能。Nexus还支持插件扩展和LDAP集成等特性,可根据实际需求进行定制和扩展。
- JFrog Artifactory: JFrog Artifactory也是一款流行的Maven仓库管理软件,具有类似的功能和特性。Artifactory支持多种构建工具,包括Maven、Gradle、Ivy、SBT等。它提供了强大的缓存和代理机制,支持分布式部署和高可用性配置。Artifactory还支持各种持续集成、部署和测试工具的集成。
- Archiva: Archiva是Apache基金会的一个开源Maven仓库管理软件。虽然功能相对简单,但也提供了基本的仓库管理功能,包括仓库的创建、浏览、搜索等。Archiva还提供了灵活的安全机制和代理功能,支持多种构建工具。
其中,Nexus是当前最流行的Maven仓库管理软件。
1.安装Nexus
Nexus是典型的JavaWeb应用,它有两种安装包,一种是包含Jetty容器的Bundle包,另一种是不包含Web容器的war包。但是,Nexus从版本2.0开始自带嵌入式的Jetty Web容器,所以之后的版本只有一种安装包,本文将介绍这种安装方式。
1.1.下载安装包
官网下载地址:https://www.sonatype.com/products/sonatype-nexus-oss-download。
下载对应系统的安装包,并解压,如下图所示。
- nexus-3.20.1-01: 该目录包含了Nexus运行所需要的文件,如启动脚本、依赖jar包等。
- sonatype-work: 该目录包含Nexus生成的配置文件、日志文件、仓库文件等。
其中,第一个目录是运行Nexus所必需的,而且所有相同版本Nexu实例所包含的该目录内容都是一样的。而第二个目录不是必须的,Nexus会在运行的时候动态创建该目录,不过它的内容对于各个Nexus实例是不一样的,因为不同用户在不同机器上使用的Nexus会有不同的配置和仓库内容。当用户需要备份Nexus的时候,默认备份 sonatype-work 目录,因为该目录包含了用户特定的内容,而nexus-3.20.1-01目录下的内容是可以以从安装包直接获得的。
1.2.Nexus启动命令
通过cd
进入nexus-3.20.1-01/bin/
目录下,Nexus的Linux启动命令:
./nexus start
:在后台启动Nexus服务。./nexus stop
:停止后台的Nexus服务。./nexus status
:查看后台Nexus服务的状态。./nexus restart
:重新启台的Nexus服务。
1.3.登陆Nexus
通过./nexus start
启动Nexus,然后在浏览器中输入http://localhost:8081/进入Nexus首页。
Nexus拥有全面的权限控制功能,默认的Nexus访问都是匿名的,而匿名用户仅包含一些最基本的权限,要全面学习和管理Nexus,就必须以管理员方式登录。可以单击界面右上角的Sign in
进行登录,Nexus的默认管理员用户名为admin,默认密码存储在sonatype-work/nexus3/admin.password
文件中。
2.仓库与仓库组
作为Maven仓库服务软件,仓库自然是Nexus中最重要的概念。Nexus包含了各种类型的仓库概念,包括代理仓库、宿主仓库和仓库组等。每一种仓库都提供了丰富实用的配置参数,方便用户根据需要进行定制。
2.1.内置仓库
在具体介绍每一种类型的仓库之前,先浏览一下Nexus内置的一些仓库。单击Nexus界面左边导航栏中的Browse链接,就能在界面右边看到如下图的内容(或者进入以下页面 Administration > Repository > Repositories)。从中可以看到仓库有四种类型:group(仓库组)、hosted(宿主)、proxy(代理) 和 virtual(虚拟);每个仓库的格式为maven2 或者 nuget;URL为仓库地址,当需要在项目中配置私服仓库时引用的url地址。
下面介绍一下各种仓库的用途:
-
maven-central: 该仓库代理Maven中央仓库,其策略为Release,因此只会下载和缓存中央仓库中的发布版本构件。
-
maven-releases: 这是一个策略为Release的宿主类型仓库,用来部署丝组织内部的发布版本构件。
-
maven-snapshots: 这是一个策略为Snapshot的宿主类型仓库,用来部署组织内部的快照版本构件。
-
maven-public: 该仓库组将上述三种类型的仓库聚合并通过一致的地址提供服务。
-
nuget-hosted: 一个预设的宿主类型仓库,用于存储和管理 NuGet 构件。
-
nuget.org-proxy: 用于代理 nuget.org 上的 NuGet 构件。
-
nuget-group: 该仓库组将上述两种类型的仓库聚合并通过一致的地址提供服务。
2.2.仓库分类
Maven可以直接从宿主仓库下载构件;Maven也可以从代理仓库下载构件,而代理仓库会间接地从远程仓库下载并缓存构件;最后,为了方便,Maven可以从仓库组下载构件,而仓库组没有实际内容(图中用虚线表表示),它会转向其包含的宿主仓库或者代理仓库获得实际构件的内容。
2.3.创建宿主仓库
如图所示,首先点击上方Tab栏中的 Administration 图标,然后选择左侧导航栏中的 Repositories 链接,在右侧面板中点击 Create repository 按钮。
选择仓库类型 maven2(hosted)。
内容信息说明:
- Name: 表示仓库的名称
- Online: 表示仓库的在线状态,即 Nexus 仓库是否可用并能够正常访问;
- Version policy: 表示仓库存储构件的版本策略,有Release、Snapshot和Mixed三种;
- Layout policy: 表示布局策略,要求验证所有的路径都应按照 Maven 标准布局规则进行组织;
- Blob store: 用来存储实际包文件和元数据文件的物理存储位置;
- Deployment policy: 用来配置该仓库的部署策略,选项有只读(禁止部署)、关闭重新部署(同一构件只能部署一次)以及允许重新部署;
- Cleanup policies: 表示存储清理策略,用来来删除符合条件的构件。
2.4.创建代理仓库
同上述创建宿主仓库一样,选择仓库类型 maven2(proxy)。
相同的元素不再赘述。
-
Remote storage表示远程仓库的地址;
-
Use the Nexus Truststore:表示使用 Nexus 的信任存储(truststore)中的证书来连接外部系统。信任存储是一种用于存储可信任的数字证书的安全容器,在许多情况下,使用这些证书可以建立与外部系统的安全连接;
-
Auto-blocking enabled:表示如果检测到远程节点不可达或无响应,自动阻止对仓库的出站连接;
-
Maximum component age:表示最大构件年龄,控制存储在仓库中的构件的最长保留期。用于自动清理仓库中的旧构件,以保持仓库的整洁和性能;
-
Maximum metadata age:表示最大元数据年龄;
-
Routing Rule:用于允许或者限制对单个构件版本或该存储库中特定命名空间的访问;
-
Not found cache enabled:表示第一次请求一个不存在的构件时缓存该构件信息;
-
Not found cache TTL:表示缓存时间。HTTP用来配置某些认证信息或者请求头。
2.5.创建仓库组
同上述创建宿主仓库一样,选择仓库类型 maven2(group)。
Group用来筛选需要的仓库并纳入该仓库组。
3.配置Maven从Nexus下载构件
3.1.项目配置
通过在Maven项目目录下的pom.xml配置,将仅对该Maven项目有效。
<project>...<repositories><repository><id>nexus</id><name>Nexus</name><url>http://localhost:8081/repository/maven-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/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></pluginRepository></pluginRepositories>...</project>
3.2.全局配置
上述的配置只对当前Maven项目有效,在实际应用中,我们往往想要通过一次配置就能让本机所有的Maven项目都使用自己的Maven私服。这个时候读者可能会想到settings.xml
文件,该文件中的配置对所有本机Maven项目有效,但是settings.xml
并不支持直接配置repositories
和pluginRepositories
。所幸Maven还提供了Profile机制,能让用户将仓库配置放到setting.xml
中的Profile中。
<settings><profiles><profile><id>nexus</id><repositories><repository><id>nexus</id><name>Nexus</name><url>http://localhost:8081/repository/maven-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/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></pluginRepository></pluginRepositories><profile><profiles><activeProfiles><activeProfile>nexus</activeProfile></activeProfiles>
</settings>
4.部署构件至Nexus
如果只为代理外部公共仓库,那么Nexus的代理仓库就已经能够完全满足需要了。对于另一类Nexus仓库 —— 宿主仓库来说,它们的主要作用是储存组织内部的,或者一些无法从公共仓库中获得的第三方构件,供大家下载使用。用户可以配置Maven自动部署构件至Nexus的宿主仓库,也可以通过界面手动上传构件。
4.1.手动部署
当需要上传构件时,进入Browse页面,点击左侧导航栏中的 Upload,选择需要上传的仓库。
选择仓库后,进入到构造上传页面,需要选择文件及其扩展名,填写构件的依赖坐标。
4.2.Maven部署构件
日常开发生成的快照版本构件可以直接部署到Nexus中策略为Snapshot的宿主仓库中,项目正式发布的构件则应该部署到Nexus中策略为Release的宿主仓库中。在pom.xml中的配置文件如下。
<project>...<distributionManagement><repository><id>release_repo</id><name>maven-releases</name><url>http://localhost:8081/repository/maven-releases/</url></repository><snapshotRepository><id>snapshot_repo</id><name>maven-snapshots</name><url>http://localhost:8081/repository/maven-snapshots/</url></snapshotRepository></distributionManagement>...
</project>
Nexus的仓库对于匿名用户是只读的。为了能够部署构件,还需要在settings.xml中配置认证信息。
<settings><servers><server><id>release_repo</id><username>admin</username><password>*****</password></server><server><id>snapshot_repo</id><username>admin</username><password>*****</password></server></servers>
</settings>
5.权限管理
在组织中使用Nexus的时候往往会有一些安全性需求,例别如希望只有管理员才能配置Nexus,只有某些团队成员才能部署构件,或者更细一些的要求,例如每个项目都有自己的Nexus宿主仓库,且只能部署项目构件至该仓库中。Nexus提供了全面的权限控制特性,能让用户自由地根据需要配置Nexus用户、角色、权限等。
5.1.Privileges
管理仓库的多种权限。
-
Name: Privilege 的名称,用于唯一标识这个 Privilege。
-
Description: 对 Privilege 的描述信息,便于理解和管理。
-
Type: 指定 Privilege 的类型。有如下几种类型。
- Application: 对应用程序级别的权限控制。
- Repository Admin: 授予管理仓库的权限级别(Administration)。
- Repository View: 授予访问仓库的权限级别(Browse)。
- Repository Content Selector: 根据特定的筛选器条件选择搜索内容。
- Script: 允许执行自定义脚本操作。
- Wildcard: 拥有所有符合通配符模式的资源或操作的访问权限。
-
Permission: 对特定资源或操作的授权许可,以字符串形式表示。通常由目标资源类型和操作组成,使用冒号分隔。
5.2.Roles
Roles是一种组织权限的方式,用于集中管理和分配权限。角色定义了一组权限,可以将这些角色分配给用户,从而授予他们相应的权限。创建方式如下所示。
5.3.Users
用户可以被赋予一个或者多个角色,角色可以包含一个或者多个权限,角色还可以包含一个或者多个其他角色。