登录Nexus
点击右上角的login,输入账号密码即可登录,初始账号密码为admin/admin123
管理仓库
点击左边的Repositories即可打开仓库管理页面
仓库类型
Nexus中有四种仓库类型group,hosted,proxy,virtual,这里我们不关心virtual,只介绍下另外三种类型:
- hosted 本地仓库,通常我们会部署自己的构件到这一类型的仓库。
- proxy 代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。
- group 仓库组,用来合并多个hosted/proxy仓库,通常我们配置maven依赖仓库组。
Nexus预定义的仓库
Nexus预定义了Public Repositories、3rd Party、Central、Releases、Snapshots这几个主要的分支(不同版本的Nexus对应的名称会有一点差异),主要作用如下:
- Public Repositories 这是一个group类型的仓库,一般情况下里边包含了其他所有仓库,这样做的好处是我们在maven的pom.xml中只需配置一个仓库链接即可,无需针对所有仓库单独配置。
在PublicRepositories的Configuration页中可以看到包含的仓库组,通过调整顺序可以更改优先匹配的仓库 - Central 这是proxy类型的,代理的是https://repo1.maven.org/maven2/,也就是Maven中央仓库
- 3rd Party 用于部署第三方构件,有些构件如Oracle的JDBC驱动,我们不能从公共仓库下载到,我们就需要将其部署到自己的仓库中
- Snapshots 用于部署我们自己的snapshot构件
- Releases 用于部署我们自己的release构件
Release和Snapshots的区别
在配置hosted和proxy类型的仓库时,需要配置Repository Policy指定仓库类型是Release或Snapshots类型。Maven默认情况下是根据构件的版本号去更新依赖构件的,但是在开发过程中我们如果引入的构件还没进入稳定状态,构件也是在不断的修改和发布,如果使用Release类型则必须修改版本号才能更新依赖,针对这种情况我们可选择Snapshots类型。对于Snapshots类型,Maven会从镜像中获取构件,即使不更改版本号也能确保构件是最新的。但是也因为Snapshots类型代表着构件仍处于开发状态,是不稳定的构件,所以要根据实际需要选择Release或Snapshots类型。
Download Remote Indexes的配置
[这点很重要!]打开Central仓库的Configuration页,在Download Remote Indexes一项中默认是false状态,这是因为Nexus初始状态下防止在用户不知情的情况下自动下载构件,所以要求用户手动修改成true状态,只有修改为true才能下载Maven中央仓库的索引文件。注意所有proxy类型的仓库都要配置Download Remote Indexes为true才可用。
Download Remote Indexes为true后,选中对应仓库,右键选择Repair Index,然后Nexus就会开始下载远程仓库的索引文件,如果索引文件非常大,可能会花费比较久的时间。
要测试是否下载成功可以在Browser Index页中查看是否能够打开索引目录。
proxy仓库配置成功后可在Artifact Search中查找对应的构件,如搜索maven对应的搜索结果如下
上传私有构件
有些构件如Oracle的JDBC驱动,我们无法从公共仓库下载到,所以我们只能先上传到Nexus,创建私有构件。通常这些无法从公共仓库下载的构件我们会放在3rd party中。
- 在3rd party仓库的Artifact Upload页中我们可以上传已下载的第三方jar包,步骤如图
- 上传后在Maven项目的pom.xml中添加对应的dependency即可引入对应构件
Maven中使用Nexus
在Maven项目的pom.xml中配置repository指定到我们的public仓库地址即可
(注意:因为我们的public中包含了policy为napshots的仓库,所以在配置repository时需要设定snapshots enable为true)
<repositories>
<repository>
<id>public</id>
<name>Public Repositories</name>
<url>http://xx.com/nexus/content/groups/public/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>