Nexus搭建maven私服
前言
使用nexus2.14版本搭建maven私服,中间踩了一些坑,记录下来,nexus3.x 版本和nexus差别还是不小的,尤其是索引的更新。
2019-04-15更新,看完《maven实战》后修改
私服的概念和我们为什么要配私服
什么是私服
私服可以看作是一个仓库,项目开发时总是要需要构件的,配置在局域网内的私服可以让局域网内所有用户请求构件,而不必频繁的访问中央仓库(众所周知,maven中央仓库的速度),升值有些开发环境时不允许开发人员连接外网的,那么开发人员的唯一远程仓库就是私服,私服从外部下载构件
为什么配私服
出了上述的原因之外,私服更有协议maven中央仓库没有的优势,比如开发人员可以将项目打包部署到私服,供其他人员使用,一些小众的jar包可以手动上传至私服
总的来说,一般大一些的项目都会配置
下载安装
下载nexus2.14版本,下载链接:nexus2.14下载
下载完成后解压得到两个文件夹,一个安装目录一个work目录,进入安装目录、bin、jsw,选择和自己操作系统匹配的文件夹进入
注意:
这里尤其注意的是不能解压在包含中文字符的目录下,否则启动会报一个无法打开日志文件的错误!!!
我安装在windows上的,进入windows_64x,可以看到有多个命令,介绍如下
1 | console-nexus.bat 以命令窗口的形式启动,关闭后服务停止 |
双击启动nexus,打开游览器输入http://192.168.88.16:8081/nexus/,出现以下页面表示启动成功
至此nexus安装启动成功
Nexus页面介绍
Repositories
这个是nexus最核心的功能,在这里可以创建仓库,配置仓库属性
![]https://blog-1258374330.cos.ap-shanghai.myqcloud.com/%E5%8D%9A%E5%AE%A2/nexus%E6%90%AD%E5%BB%BAmaven%E7%A7%81%E6%9C%8D/Snipaste_2019-04-15_14-48-11.png)
仓库介绍
可以看到仓库一般分为三种,hosted宿主仓库,proxy代理仓库以及virtural的虚拟仓库,所谓宿主将库,就是用于将构件上传至maven私服的仓库,一般我们配置上releases和snapshots两个,而代理仓库就是用于下载外部构件的远程库,aliyun镜像仓库就是一个代理仓库,virtural的虚拟仓库仅仅是逻辑上的仓库,他可能两个仓库合并
1 | 介绍一下仓库的属性: |
更新索引
注意
更新索引的意义仅仅在于搜索而已,事实上我们不更新索引也是没关系的,只要下载了相关jar包,点击rebuild index就可以将已下载的jar包索引构建完毕,
登录
管理员账号登录,用户名admin,密码admin123
更新索引
一般我们初次启动nexus时,center仓库是空的,而索引可以看作是压缩版的jar包集合,让我们可以从本地的远程库中拉取依赖,可以在configuration中配置索引的自动更新,但是这样下载速度奇慢无比,而且容易卡死,这在scheduled task可以看到update index一直处于running状态,这里比较推荐手动更新,网上的步骤说的都很详细
下载相关文件
三个文件,分别是nexus-maven-repository-index.gz,nexus-maven-repository-index.properties以及ndexer-cli-5.1.1.jar,这在我的百度网盘中都保存了,下载链接:
解压索引文件
三个文件放到同一目录下,执行:
java -jar indexer-cli-5.1.1.jar -u nexus-maven-repository-index.gz -d indexer
解压完毕后把indexer文件夹里面的文件拷贝到{nexus-home}/sonatype-work/nexus/indexer/central-ctx目录下,重新启动nexus
当我们更新索引成功后,可以在Browse Index后选项卡看到许多文件
搭建私服仓库
我们先建立一个aliyun的代理仓库,id为aliyun,仓库地址为 阿里云仓库;在配置两个hosted宿主仓库用以发布构件到maven私服,版本分别为snapshots和releases,deployment属性为allow允许部署;再新建一个仓库组将这些都加入,包括中央仓库,调整它的顺序,它的顺序就是maven依赖选择下载的顺序,一般我们将阿里云的代理仓库置于中央仓库之上
注意:
上传那么就要把Deployment Policy改为允许上传
私服仓库配置
添加仓库为私服仓库
这里既可以配置在settings.xml中,也可以配置pom.xml中
一般建议写在setting.xml之中
1 | <!-- 定义一些属性配置 --> |
写在pom.xml之中
1 | <repositories> |
仓库标签下有些属性还是要介绍下的
1 | id:仓库声明的唯一id,尤其需要注意的是,Maven自带的中央仓库使用的id为central, |
至此,大部分请求会请求苏福,但是想要屏蔽所有请求到私服的话,还需要配置镜像
先配置镜像用以屏蔽所有仓库的请求,转至私服
在settings.xml中,配置如下:
1 | <mirrors> |
mirrorOf配置规则
1 | <mirrorOf>*<mirrorOf>:匹配所有远程仓库。 |
配置仓库为私服仓库
这里已经可以完成构件使用的功能了,想要上传构建需要继续配置
部署构件到私服
就是把本项目上传到maven
- pom.xml中配置构件上传的地址
1
2
3
4
5
6
7
8
9
10
11
12<distributionManagement>
<repository>
<id>film-releases</id>
<name>nexus_repository</name>
<url>http://localhost:8081/repository/film-releases/</url>
</repository>
<snapshotRepository>
<id>film-snapshots</id>
<name>nexus_repository</name>
<url>http://localhost:8081/repository/film-snapshots/</url>
</snapshotRepository>
</distributionManagement> - 在settings.xml中配置认证信息
1
2
3
4
5
6
7
8
9
10
11
12<servers>
<server>
<id>film-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>film-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
更多
搭建私服的过程和使用的基本配置介绍完毕
更多的权限的细节控制,定时任务的执行,还有maven的一些基础只是就不必介绍了
相关
- 《maven实战》
- 持续集成-Sonatype Nexus安装
- Maven入门,读完这篇就够了
Nexus搭建maven私服