教你如何搭建私服、管理系统模块
- 1. 前言
- 2. 安装Nexus私服
- 3. Nexus私服介绍
- 4. setting配置私服
- 4.1. 配置mirror
- 4.2. 配置访问凭证
- 4.3 配置profile中的repository
- 5. deploy发布版本
- 6. 常见问题
- 6.1 快照版本下载不了
- 6.2 更新了jar,但是使用者没有拉取到最新的
1. 前言
系统最开始的时候由一个单体应用慢慢拆分成微服务,并且抽取成一些共同的模块,组装成jar进行管理,如果没有私服的时候则无法做好版本管理、团队间使用也会很不方便。因此需要在系统搭建maven私服,将共同模块上传到私服,将发布好的版本上传到私服进行管理。
我们在编写springboot项目的时候会使用到maven,maven是用来管理仓库jar的工具,可以通过maven下载到我们需要的jar,同时我们编写的服务也可以通过maven给其他系统使用。
nexus是maven私服的管理工具,部署私服就是部署nexus。
2. 安装Nexus私服
参见:nexus部署
3. Nexus私服介绍
打开nexus主页面是下面所示:
主页面主要是可以查看私服上面下载过的jar,也可以手动上传第三方私服。点开browse可以看到如下所示:
nexus将版本的种类可以分成如下三种
- maven-central : 中心库的jar(阿里云的、maven中心仓库)
- maven-release:发布版本
- maven-snapshots:快照版本
在这里我们可以看到有一个maven-public共同仓库,常见这个仓库是一个仓库组,包括了以上三组的仓库数据。也就是说我们对外提供了一个maven-public,就可以查询到对应以上三种的库存数据。
4. setting配置私服
以下配置可以在单个项目中进行配置,但可以在setting文件进行配置,生效范围不一致。
4.1. 配置mirror
<mirror>
<!--该镜像的唯一标识符。id用来区分不同的mirror元素。 -->
<id>public</id>
<!--镜像名称 -->
<name>maven-public</name>
<!--*指的是访问任何仓库都使用我们的私服-->
<mirrorOf>*</mirrorOf>
<!--该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL。 -->
<url>http://xxxxxxxx:6081/repository/maven-public/</url>
</mirror>
4.2. 配置访问凭证
<server>
<id>public</id>
<username>admin</username>
<password>xxx</password>
</server>
<server>
<id>releases</id>
<username>admin</username>
<password>xxx</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>xxx</password>
</server>
4.3 配置profile中的repository
首先介绍profile,在setting有一个二级节点就是profile,类似springboot中的yml的active配置,比如开发环境,可以将profile切换成dev。
在profile里面我们可以配置repository,也就是仓库地址,按正常的maven下载依赖的顺序,首先先使用本地仓库,再去配置的repository进行下载,mirror是仓库的镜像,也就是说repository请求地址会被mirror镜像给替代了,当然仓库地址可以配置多个,那么mirror也有对应的映射参数。
<!--*指的是访问任何仓库都使用我们的私服-->
<mirrorOf>*</mirrorOf>
比如我们配置了
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>public</id>
<name>maven-public</name>
<url>http://ccc:6081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
</profile>
这里的ccc url也会被镜像成mirror指定的url。
默认如果单纯配置了mirror,而不配置仓库的话,snapshots版本是下载不了的,需要在仓库配置定义enabled
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
updatePolicy 表示更新策略,默认从远程仓库拉取了jar,那么jar就放在本地仓库了,如果有人更新了对应快照版本,本地仓库有那么就不会重新去拉取,但是配置了updatePolicy:always则每次都是会去拉取。
5. deploy发布版本
在pom配置如下
<!--上传到私服-->
<distributionManagement>
<repository>
<id>releases</id>
<name>Releases</name>
<url>http://xx:6081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Snapshot</name>
<url>http://xx:6081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
需要在setting中servers指定对应id的访问凭证
6. 常见问题
6.1 快照版本下载不了
没有配置repository
6.2 更新了jar,但是使用者没有拉取到最新的
- 发布版本默认不会去重新拉取
- 快照版本如果没有配置updatePolicy也不会去拉取
将本地仓库的jar删除,重新拉取一次