最近项目开发中需要对一些jar包进行修改,但是因为项目组当前没有私有的Maven
镜像仓库,所以自己想搭建一个我们项目组专用的私有镜像服务器。网上看了一些资料好像使用Nexus
比较多,所以自己也准备自己使用Nexus
搭建一个Maven
私服。
相关的资料文档建议查看官网。
Nexus下载地址
根据自己的系统进行下载即可,Linux
系统选择Unix archive
版本即可。
最开始我本来想在自己的电脑上先安装一个尝试一下,结果下载过程中发现下载速度真的是特别的慢,所以最后决定选择使用Docker
进行部署。
1、拉取镜像
首先查找下Nexus
相关的仓库
docker search nexus3
结果如下:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
sonatype/nexus3 Sonatype Nexus Repository Manager 3 868
shifudao/nexus3 clone from nexus3 image but based from openj… 4 [OK]
madmuffin/nexus3 Sonatype Nexus3 Milestone7 docker image 2 [OK]
home1oss/nexus3 An auto configured nexus3 2 [OK]
alvindaiyan/nexus3-azure-appservice 1
cirepo/nexus3 An auto configured nexus3 1 [OK]
....
这里选择官方的仓库。拉取镜像到本地:
docker pull sonatype/nexus3
如果拉取速度较慢可选择使用国内的Docker
镜像源仓库,修改Docker
配置daemon.json
:
vi /etc/docker/daemon.json
### 添加配置
"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"],
"data-root": "/home/ypcfly/docker/data"
另外这里我也修改了Docker
的数据根目录。
2、运行Nexus
docker run -d -p 8081:8081 --name nexus3 -e NEXUS_CONTEXT=nexus sonatype/nexus3
因为是第一次启动,所以没有做什么特别的配置,也没有挂在目录。
启动之后我们查看启动日志:
docker logs -f nexus3
第一次启动可能会比较慢一点,启动的时候最好不要限制内存,如果限制的话内存最好大一点,比如2G,内存偏小也会导致启动失败。
看到下面内容,说明Nexus
启动成功:
.......
-------------------------------------------------
Started Sonatype Nexus OSS 3.27.0-03
-------------------------------------------------
3、访问Nexus并创建仓库
默认端口是8081,我们在运行时进行的端口映射也是8081,所以直接在浏览器访问:
localhost:8081
结果发现404,有点蒙了,启动日志没有问题啊,端口也没问题.....后来在看启动命令-e NEXUS_CONTEXT=nexus
,发现自己添加了上下文。添加访问上下文nexus,再次在浏览器输入:
localhost:8081/nexus
浏览器显示如下图:
点击右上角Sign in登陆,默认账号admin,我网上之前看到有的文章说默认密码是admin123,但是自己尝试之后发现密码错误,所以又看了官方文档。官方文档说的是:
Its username is admin and the initial password can be found in an
admin.password
file in the$data-dir
directory. You can sign in with the button on the top right corner of the user interface.
意思是说默认密码是在数据目录下的admin.password
中,但是因为自己启动时没有进行目录挂载,所以只能进入容器内进行查找:
$ docker exec -it nexus3 sh
## 进入`nexus-data`
$ cd nexus-data
$ ls
$ vi admin.password
## 复制密码后退出容器
$ exit
进入容器内找到了nexus-data
目录,然后找到admin.password
,重新输入密码后,登录成功,然后会提示设置访问权限:
也就是是否允许匿名访问,根据情况选择就可以了。
为了方便登录我们再创建一个用户,点击
Security
-> Users
-> Create User
输入相关信息,并赋予该用户管理员的权限:
接下来我们创建一个自己的仓库:
点击 Repository
-> Repositories
-> Create repository
这时候可以看到很多不同类型的仓库,比如apt、docker、maven2、yum、go、helm
等等。这里需要介绍一下repository的几种类型:
hosted,本地仓库,一般情况我们会部署的都是这一类型的仓库。比如自己公司的私有仓库。
proxy,代理仓库,顾名思义,它们被用来代理远程的公共仓库,如maven中央仓库。
group,仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。
所以我这里选择maven2(hosted)
。
输入仓库名称:ypc,然后根据自己的情况选择Version policy
、Deployment policy
等,保存之后就看到自己的仓库已经出现了
创建好之后我们就可以将自己的一些jar包等推送到自己的镜像仓库了。
4、测试发布jar到仓库
既然创建好了我们的私有仓库,那么我们就要测试一下,能否将我们的jar推送到我们的Maven
私服。首先我们需要创建一个项目,为了方便我就打开了一个之前的spring boot
项目,准备用这个项目做试验。开始之前先看下我的pom.xml
中这个项目的坐标信息:
...
com.ypc.rocketmq
rocketmq-starter
1.0-RELEASE
rocketmq
test rocketmq starter
jar
...
关于坐标的作用我想不需要我再做解释了吧,简单点说就是一个jar包的地址,就是用来定位jar包。
为了将我们打的jar包推送到我们私有仓库,需要修改项目的pom.xml
文件,添加自己私有仓库的相关信息,如下:
......
release
Release
http://localhost:8081/nexus/repository/ypc/
snapshot
Snapshot
http://localhost:8081/nexus/repository/ypc/
在这里配置了一个release和一个snapshot两个仓库,一个用来发布正式的jar,一个发布测试jar。id
和name
属性根据自己的需求填写就行了,url
就是仓库ypc
的地址,可以直接从浏览器复制。
但是毕竟项目的打包、发布都是需要使用Maven
的,所以接下来我们需要修改Maven
的配置文件,即setting.xml
,Maven
配置文件中需要配置的地方相对较多,这里一步一步来说明。
首先,添加访问server配置,即我们访问Maven
私服仓库时的信息,比如用户名、密码或者私钥。这里配置的id
需要和上面pom.xml
中的id
保持一致,用户名和密码根据自己的情况进行填写,admin
的密码登录之后我是做了修改的。
....
release
admin
admin123456
snapshot
admin
admin123456
....
其次,我们需要配置镜像信息,也就是私有仓库的镜像地址,下面的配置中我添加了一个镜像配置,并且覆盖了默认的仓库地址。在配置文件这里,添加了一个反而id
为nexus
,在该配置文件中我配置了一个repository
和一个pluginRepository
两个仓库,不过都指向的是同一个URL
。
....
central
*
http://localhost:8081/nexus/repository/ypc/
nexus
release
http://localhost:8081/nexus/repository/ypc/
true
true
snapshot
http://localhost:8081/nexus/repository/ypc/
true
true
nexus
...
到这里需要添加或者修改的配置到这里就完成了,接下来我们测试一下把我们的项目打包,并发布发到我们的镜像仓库,因为idea自带了相关的插件,所以我就直接使用插件了(命令我也记不住...),直接点击deploy
,然后会看到相关的日志信息,下面是部分截图
可以看到有上传到
release
仓库的相关信息。
最后我们在登录到仓库看一下上传的jar包信息:
根据上图的信息也可以看出我们的jar包已经成功发布到我们的私有镜像仓库了。关于从私有镜像仓库下载jar包其实和从
Maven
中央仓库下载没有什么区别,这里就不再测试了。
关于使用
Docker
搭建Nexus
私有Maven
镜像仓库,以及发布jar包到Nexus
就到这里了,总体来看还是比较简单的,感兴趣的小伙伴不妨都尝试一下。