前言
因为某些原因某些企业希望私服是不能连接外网的,所以需要某些开源依赖需要我们手动导入到nexus中,尽管nexus为我们提供了web页面。但是一个个手动导入显然是一个庞大的工程。
对此我们就不妨基于脚本的方式实现这一过程。
预期效果
笔者本地仓库有一个自定义的jar包,本次实验会通过脚本的方式将其上传到私服上。
然后我们其他的项目会通过私服将这个依赖引入,实现内网引入这个自定义依赖,如下图所示,将自定义通过脚本批量导入私服之后,我们可以直接导入。
操作步骤
创建自定义hosted仓库
因为笔者私服是nexus3所以基于脚本导入依赖时是需要自己手动创建hosted仓库的。
进入选择页面,我们选择maven-hosted,进行本地仓库配置。
配置我们的本地仓库,读者可以按照下图的注释自行配置。
完成配置后到最下方点击创建。
将本地依赖传到服务器上
以笔者为例,为了实验笔者将所有的com包都传到服务器上。
编写脚本
我们仓库目录中编写脚本,以笔者为例,笔者仓库目录为/tmp/nexus-repository/,所以笔者就在这个目录编写一个脚本
vim mavenimport.sh
添加下面这段内容
#!/bin/bash
# copy and run this script to the root of the repository directory containing files
# this script attempts to exclude uploading itself explicitly so the script name is important
# Get command line params
while getopts ":r:u:p:" opt; docase $opt inr) REPO_URL="$OPTARG";;u) USERNAME="$OPTARG";;p) PASSWORD="$OPTARG";;esac
donefind . -type f -not -path './mavenimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}/{} ;
完成后添加执行权限
chmod +x mavenimport.sh
执行脚本导入依赖
重点步骤来了,我们到脚本的目录执行脚本,命令模板如下
./mavenimport.sh -u nexus账户 -p nexus密码 -r 自定义hosted地址
以笔者为例,笔者的命令就是
./mavenimport.sh -u admin -p xxxxx -r http://ip:8081/repository/my-hosted/
查看是否导入成功
然后脚本就会不断输出内容,将com包的所有依赖导入到nexus私服中,待脚本执行结束后,我们到nexus管理页面查看一下依赖是否导入成功。
点击浏览,查看我们的自定义仓库。
可以看到我们的com包都成功导入了。
测试
我们本地将com包删除,然后引入自定义的com依赖看看。
到idea点击导入
可以看到类成功导入了,实验成功。
注意事项
为什么我脚本执行没有报错,但是依赖没有上传到nexus呢?
- 检查是否可以登录,如果不能登录请尝试重启,先确保可以登录,因为我们的脚本执行逻辑就是先登录再传依赖。
- 使用脚本导入依赖需要从根文件夹进行导入,例如我们要导入spring-boot-starter-actuator那么我们就必须将\org这个目录直接上传上去进行导入。
如下图,我们必须将整个IO上传到服务器上,然后使用脚本导入。
- 完成后需要将maven中对应文件夹下的.lastUpdated文件删除,之后即可正常导入了。
参考文献
将本地库批量导入到Nexus3.x上(Maven私服)