一、为什么要创建私服?
- 部署内部生成的第三方构件
- 加速maven构建(国内访问中央仓库的速度你懂得。。)
- 可以降低外网带宽,有了私服后,项目所需的依赖首先从私服获取,这样就可以避免很多重复的依赖都需要从中央仓库拉取,导致的外网带宽压力大的问题
二、nexus简介
特性:
- 较小的内存占用(最小为28MB)
- 拥有友好的界面
- 支持代理仓库、宿主仓库和仓库组
- 基于文件系统,不需要数据库
- 界面支持组件的搜索和上传
三、nexus安装
nexus是一个典型的javaweb应用,它有两种安装包,一种是包含Jetty的Bundle包(本文使用这种方法),一种是不包含WEB容器的war包。
3.1、nexus 下载
下载地址:https://www.sonatype.com/download-oss-sonatype
根据自己系统环境来进行下载
3.2、安装和启动
将文件解压后,会有两个子文件。
- nexus-3.14.0-04
该目录包含了Nexus运行所需的文件,如启动脚本、依赖jar包等。 - sonatype-work
该目录包含了Nexus生成的配置文件、日志文件、仓库文件等。
第一个文件是必须的,第二个目录不是必须的,Nexus会在运行的时候动态创建该目录,这里也是记录了不同用户对Nexus的不同配置和存放的仓库内容。当用户需要备份Nexus的时候,需要备份sonatype-work,因为该目录包含了用户特定的内容。
启动nexus
linux系统下运行
nexus-3.14.0-04/bin文件夹的nexus提供了如下命令
nexus {start|stop|run|run-redirect|status|restart|force-reload}
我们在bin文件下使用./nexus run 启动Nexus
注意:由于我是在阿里云的ecs搭建的nexus。。忘记配8081端口的开放,耽误了点时间。。
这样就成功启动了~~
3.3、登录nexus
默认的Nexus访问时匿名的,匿名用户至包含了一些最基本的权限,我们需要使用管理员的方式登录。
Nexus的默认管理员的用户名/密码为:admin/admin123
记得登录后,顺手把初始密码改掉,养成好习惯哈~~
3.4、nexus内置的仓库
nexus内置了一些仓库,总体来看有以下几种类型(nuget的三个仓库不用理~~)
- group-仓库组
- hosted-宿主
- proxy-代理
下面具体来说说这些仓库
- maven-central 该仓库代理Maven中央仓库,会下载和缓存中央仓库中发布的构件
- maven-releases 这个仓库用来部署组织内部的发布版本构件
- maven-snapshots 这个仓库用来部署组织内部的快照版本构件
- maven-public 仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使用。
这些概念只要你使用过maven基本都不难理解,这里不做赘述。另外,还可以通过界面自己新建其他的仓库,这里也不做示范了~
3.5、maven项目中配置私服仓库
<repositories>
<repository>
<id>souche</id>
<name>artifactory</name>
<url>https://localhost:8081/repository/public/</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>interval:2</updatePolicy>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>souche</id>
<name>artifactory</name>
<url>https://localhost:8081/repository/public/</url>
</pluginRepository>
</pluginRepositories>
3.6、配置镜像
我们可以配置一个镜像,将所有对构件的请求全部转发给我们搭建好的私服仓库,这个简化了配置,又统一管理了构件。
<mirrors>
<mirror>
<id>nexus-public</id>
<name>nexus-public</name>
<!--镜像仓库url-->
<url>http://127.0.0.1:8081/repository/public/</url>
<!--匹配所有仓库,对所有仓库的请求都会转发到我们配置好的镜像仓库里边-->
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
3.7、部署构件至Nexus
1)、pom里面,distributionManagement中配置发布的snapshot快照库和release发布库的地址
<distributionManagement>
<!--需要发布的releases库-->
<repository>
<id>nexus-releases</id>
<name>Local Nexus Repository</name>
<url>https://127.0.0.1:8081/repository/releases/</url>
</repository>
<!--需要发布的快照库-->
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Local Nexus Repository</name>
<url>https://127.0.0.1:8081/repository/snapshots/</url>
</snapshotRepository>
</distributionManagement>
2)、maven配置文件settings.xml中配置私服的认证
注意:认证的库的id需要和前面配置的id相同
<servers>
<!--releases库的认证-->
<server>
<id>nexus-releases</id>
<username>sdev</username>
<password>********</password>
</server>
<!--快照库的认证-->
<server>
<id>nexus-snapshots</id>
<username>sdev</username>
<password>********</password>
</server>
</servers>
3.8、配置一个可以发布构件的sdve用户
nexus默认提供了两个用户,一个是admin管理员,一个是匿名访问用户,由于我们开发的时候需要把内部的构件发布到nexus私服上,所以现在我们来创建一个拥有发布权限的用户,sdve。
1)、首先创建一个role(角色)
这里需要注意,我们需要给这个角色添加一些基础的权限
- nx-repository-view-maven2-*-brower 代表对maven2开头的所有的仓库的UI访问权限
- nx-repository-view-maven2-*-edit 代表对maven2开头的所有的仓库的构件更改的权限
- nx-repository-view-maven2-*-read 代表对maven2开头的所有的仓库的构件拥有拉取的权限
基础的权限添加完之后,我们需要让nx-dev这个角色包含nx-anonymous这个角色
2)、创建用户
这里没什么难点,记得把上一步添加的角色赋给用户就完事了。
3)、在maven中配置使用这个用户来访问nexus,即可以拥有对仓库构件的访问和发布权限了。
使用mvn develop后,nexus私服中便有了我们内部的构件了~