一.简介
Nexus 通过维护仓库的索引来提供搜索功能。
二.索引更新
点击仓库,右键,会弹出一组列表,其中就有修复索引和更新索引功能,你可以在 Browse Index 选项卡看到当前仓库的最新索引树状图。 Browse Storage 选项卡可以看到本地文件夹的所有jar树状图。
三.索引更新与Jar上传
一般,我们不需要进行索引更新,因为jar一般是通过Artifact Upload选项卡上传或者通过程序配置distributionManagement节点进行deploy上传。这时能实时更新。
以上针对jar很少量情况,如果需要大量上传jar:比如你在内网环境下,需要手动上传大量jar包;又或者你需要简单快速地把本地Maven仓库的所有 jar 扔到 nexus 上?
这时,其实我们可以直接把本地Maven仓库打包,直接覆盖到 nexus 那台主机的相应Hosted仓库的Local Storage Location文件夹。但是扔上去后,搜索时并不能搜到我们上传的 jar,因为还未给这些 jar 建立索引!
我们可以通过Scheduled Tasks定时任务来定时更新索引:
- Task Type 选择 Update Repositories Index
- Task Settings下可直接选择 Repository/Group 为 All Repositories,表示所有仓库都进行索引更新
- Recurrence 可选择更新频率,Manual表示手动执行。
PS:由于我们公司私服部署在内网,需要先外网下载依赖,然后打包传到内网,最后上传到 nexus 私服,并手动更新索引。我通过程序实现了自动化:
- 外网的某页面贴入maven依赖
- 构造一个maven项目,用于执行 denpency:tree 解析依赖树
- 打包下载相应 jar
- 通过指定渠道传回内网 ftp 服务器
- 内网应用程序监听ftp
- 发现文件后下载到 nexus 私服相关Local Storage Location文件夹
- 调用Scheduled Tasks手动更新索引。
关键在于更新索引处:
- 登录 http://ip:port/nexus/service/local/authentication/login?_dc=
- 更新索引 http://ip:port/nexus/service/local/schedule_run/[id]
- 登出 http://ip:port/nexus/service/local/authentication/logout
以上的 [id] 表示你建立的定时任务ID,它是递增的,总是等于你建立的定时任务的次数。如你第五次建立定时任务,则该任务的ID即是5。