一、nexus是什么
一句话,maven仓库管理器,相对官服(Maven中央仓库)来说是私服。
二、为什么要用nexus(什么场景下用nexus)
公司内部的公共库不想上传到maven中央仓库,但是又想用maven强大的包管理工具,同时一个私有的公共库对协同开发有极大的便利。如果是一般的单体项目直接把jar放到项目里面就没必要用到nexus了。在我看来,nexus最主要的作用就是协同开发并且是多个项目组协同开发的时候可以使用。
三、Nexus的docker安装
- vi docker-compose.yml
version: '3.1'
services:
nexus:
restart: always
image: sonatype/nexus3
container_name: nexus
ports:
- 8082:8081
volumes:
- nexus-data:/nexus-data
# 防止创建的volumns权限不够, 在docker/volumes下创建nexus-data
volumes:
nexus-data:
创建挂在的数据卷volumes为nexus-data
(注意nexus-data后面的:
不要漏),默认在/var/lib/docker/volumes
目录下创建挂载卷, 挂载卷为之前执行的目录 + 下划线 + nexus-data
,例如nexus_nexus-data
(之前在/usr/local/docker/nexus下创建的docker-compose.yml文件和执行)
- docker-compose up -d
用docker-compose创建docker容器。
- docker-compose logs -f 查看日志
docker-compose.yml同级的目录下执行,或者用我们常用的docker看日志的命令:docker logs -f nexus (容器名 container_name)
账号: admin
密码: cat /var/lib/docker/volumes/nexus_data/_data/admin.password
我设置的密码是123456
登录进去,可以看到maven还有nuget,nuget不用管,它是.NET
的包管理工具,我们使用nexus
的目的是管理和共享jar包。
四、结合项目使用
1. 首先修改maven的setting.xml文件,添加用户信息(认证和授权),以便jar包上传私服时的身份认证,比如上传公司的公共包commons.jar
。
注意:pom.xml版本1.0.0-SNAPSHOT
带SNAPSHOT
都是快照版,上传到nexus-snapshots中,1.0.0-RELEASE
或1.0.0
都是release
版上传到nexus-releases。
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>123456</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>123456</password>
</server>
</servers>
2. 创建maven项目,pom.xml创建发布管理节点
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Release Repository</name>
<url>http://192.168.109.132:8082/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://192.168.109.132:8082/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
id
:与上面的server的id一致
url
:仓库地址,从nexus私服中可以找到
name
:随意
snapshotRepository
:快照仓库
repository
:发行仓库
3. 项目发布到私服
maven会根据<version/>
中是否含有SNAPSHOT
来选择是发布到快照仓库还是快照仓库。deploy作为maven生命周期第二阶段的最后一步会把什么package、install都执行到,发布命令如下:
mvn deploy
发布jar包到私服,比如是common.jar
这个包。在协同开发过程中,负责订单服务的项目组需要依赖common
这个服务,但是本身是没有common
这个服务的代码的,所以需要负责开发common
的开发人员把common.jar
发布到nexus私服供其他项目组使用。(不然一个jar传来传去很乱,还涉及到common.jar
本身的升级改造,若通过私下发送jar包给其他项目组引用,jar包每做一次升级所有依赖该jar包的项目组都要重新获取新的依赖还有修改依赖配置等等繁锁的过程)
4. 手动上传第三方依赖
登录nexus后台,选择Upload
,然后填写信息,最后点击Upload
。
5. 配置项目从nexus下载依赖(配置<repositories>
)
<repositories>
<repository>
<id>nexus</id>
<name>Nexus Repository</name>
<url>http://192.168.109.132:8082/repository/maven-public/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Nexus Plugin Repository</name>
<url>http://192.168.109.132:8082/repository/maven-public/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</pluginRepository>
</pluginRepositories>
协同开发时,依赖的A的快照版的jar,要勾选截图的总是更新快照
。只有这样在A更新并重新发布快照时,idea才会重新拉去新的快照jar依赖。