Nexus就是Maven的私服
我们从项目实际开发来看:
- 一些无法从外部仓库下载的构件,例如内部的项目还能部署到私服上,以便供其他依赖项目使用。
- 为了节省带宽和时间,在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。当本地Maven项目需要下载构件时,先去私服请求,如果私服没有,则再去远程仓库请求,从远程仓库下载构件后,把构件缓存在私服上。这样,及时暂时没有Internet链接,由于私服已经缓存了大量构件,整个项目还是可以正常使用的。同时,也降低了中央仓库的负荷。
什么场景用Maven私服呢?
在实际开发中,项目中可能会用到第三方的jar、内部通讯的服务接口都会打入到公司的私服中。
基于Docker搭建Maven私服
- 下载一个nexus3的镜像
docker pull sonatype/nexus3
- 将容器内部/var/nexus-data挂载到主机/root/nexus-data目录。
docker run -d -p 8081:8081 --name nexus -v /root/nexus-data:/var/nexus-data --restart=always sonatype/nexus3
关闭防火墙,访问http://ip:8081
Maven私服启动容器稍微比较慢,等待1分钟即可。
默认登陆账号 admin admin123
创建Maven私服仓库
创建私服仓库
创建仓库,点击Create repository,然后选择maven2(hosted)然后输入仓库名称(test-release)。在version policy中选择这个仓库的类型,这里选择release,在Deployment policy中选择Allow redeploy(这个很重要).
创建私服账号
点击左侧菜单栏的Users菜单,然后点击Create local user.我这里创建了一个用户,账号密码都是:mayikt
Mayikt-release
本地settings.xml
<servers>
<server>
<id>xxx</id>
<username>xxx</username>
<password>xxxx</password>
</server>
</servers>
创建一个Maven工程
创建一个maven工程,并且打包到maven私服。修改pom
<!--指定仓库地址 -->
<distributionManagement>
<repository>
<!--此名称要和.m2/settings.xml中设置的ID一致 -->
<id>mayikt</id>
<url>http://192.168.212.230:8081/repository/mayikt-release/</url>
</repository>
</distributionManagement>
mvn deploy
测试依赖
<dependencies>
<dependency>
<groupId>XXX</groupId>
<artifactId>XXX</artifactId>
<version>XXX</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>xxxx</id>
<url>仓库URL地址,在Nexus中查看</url>
</repository>
</repositories>