Maven私服上传pom和jar实操-CSDN博客
Maven私服上传jar实操_maven fakepath-CSDN博客
之前写过两篇向maven私服上传jar的操作,看到阅读量还可以,觉得应该有很多人有这个需求,所以这次再放一个大招,通过批量的方式向私服传jar和pom,这个是笔者在实际操作中实践的结果,用以提高生产效率,希望能对大家有所帮助。
场景描述:
背景如前面两篇介绍的一样,只是后续要上传的体量比较大,一个一个的传比较费时间,因此不得不另辟蹊径找个更稳妥的解决方案。贴出来笔者的环境如下,由于是内网开发,涉及到保密,因此以下环境仅作示意:
整体的开发环境如上图所示:所有开发工作都在内网进行,有个内网的仓库 maven仓库-02 会不定时的跟互联网公共仓库进行同步。其中云桌面为本地开发环境,可以直连maven仓库-02 ,一般情况下够用,由于历史原因还有一个 maven仓库-01 这个是自己搭建的仓库,一般本地开发也会连接这个maven仓库,一般发布的快照版本或者自己封装的公共代码一般也都提交到这个仓库。关键是maven仓库-01和maven仓库-02在网络上是隔离的,而且短期这种情况不会改善,因此本地开发不得不连接这两个maven仓库,这个不是最麻烦的,麻烦的是我们的应用部署在测试开发环境,而测试开发环境只能连接maven仓库-01,因此运行的自动化打包编译的脚本或者类似jekins就只能连接maven仓库-01 ,这就导致了提交的代码经常发生因为缺少依赖在测试环境无法打包编译通过的烦恼。
解决方案:
前面的文章也介绍过,虽然可以通过单个包上传解决缺包无法编译通过的麻烦,但是这个上传效率着实不敢恭维,有时候遇到了依赖大面积升级简直就是噩梦。
因此不得不倒逼想想其他一劳永逸的办法,最后经过实践终于摸索出了一套解决方案:由于本地仓库能同时连接maven-01 和maven-02 ,本地开发编译都没有问题,因此想办法将本地仓库的所有依赖同时上传到 maven-01 仓库就能解决了,秉持这个思路写个脚本批量上传就行了。
直接上脚本代码:
#!/bin/bash
##########################################
# author: caojiangtao
# datet: 2023-08-17
# desc: upload local repository to nexus
##########################################
if [ $# -ne 2 ] ; then
echo "argv error: please input like mav-upload.sh /d/repository /com/alibaba "
exit 2
fi
## 接收两个参数: 第一个为本地仓库的根路径,第二个为需要上传的包的目录
root_resp=$1
target_resp=$2
## 进入本地仓库的根目录
cd ${root_resp}
## 查找需要上传的文件
result=`find ${target_resp} -type f -not -path './mav-upload\.sh' -not -path '*/\*' -not -path '*/\^archetype\-catalog\.xml' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' -not -path '*/\_remote.repositories' | sed "s|^\./||" `
## 开始上传
echo "start upload files ..."
for res in ${result}
do
echo $res | xargs -I '{}' curl -u admin:admin123 -X PUT -v -T {} http://128.196.*.45:8081/nexus/content/respositories/opt/{}
done
echo "upload files successfully !!"
## 上传成功,退出
sleep 3
exit 0
上述脚本的脚本需要解决的问题就俩:
- 上传哪些依赖
其中find命令的主要作用是正则匹配,过滤xml以及repositories等无关文件,这个可以根据需要变化,例如可以只上传7天内本地仓库新增的依赖等,主要是活用find命令。
- 如何上传
上传通过的是curl命令,其中admin/admin123为远程仓库maven-02的登录用户名和密码,这个要根据实际情况填写,也可以当参数输入,另外 -T 后面跟的文件上传的目标地址也需要根据实际情况更改
这个脚本呢可以让我们的批量上传事半功倍,当然也提供了一种解决思路,后续大家也可以根据这个思路拓展更好用的脚本,而且不限定只使用shell。
温馨提示:如果是windows环境,这个脚本需要在Git Bash中执行,如果没有就自己想办法了!
实测效果:
由于涉及内外机密,实测效果就不跟大家展示了,目前这个方案对我来说比较实用高效。