Nexus Maven仓库迁移

Nexus Maven库迁移是开发环境迁移的重要一环,很多教程通过直接复制Nexus目录方式实现,但容器化部署Nexus时这种方式比较复杂,尤其是在公司容器平台部署的Nexus无法获取底层权限。

搜集到网上有通过shell脚本方式将Maven仓库文件一个个传到Nexus里仓库的方案,简单记录如下:

1.将所有要上传的镜像文件夹放到一个文件夹中,如/proxy

2.在文件夹内创建批量上传nexus库脚本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; do

    case $opt in

        r) REPO_URL="$OPTARG"

        ;;

        u) USERNAME="$OPTARG"

        ;;

        p) PASSWORD="$OPTARG"

        ;;

    esac

done

  

find . -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}/{} ;
复制代码

3.赋予执行权限

chmod +x mavenimport.sh

4.执行,-u 用户名 -p 密码 -r 仓库地址

./mavenimport.sh -u admin -p 123 -r http://192.168.60.133:8081/repository/my_repo/

 

拓展:从Nexus某个仓库拉取所有依赖包到本地,并创建存放目录

复制代码
#!/bin/bash
# 按需修改nexusurl和repository,修改要创建并存放依赖的本地目录名称
nexusurl=http://ip:port
repository=repository_name
continuationToken=""
dir=proxy
mkdir
$dir cd $dir fetchComponents() { local token="$1" # 构建CURL命令 local curlCmd="curl -s -X GET \"$nexusurl/service/rest/v1/components?repository=$repository" if [[ "$token" != "" ]]; then curlCmd="$curlCmd&continuationToken=$token" fi curlCmd="$curlCmd\" -H 'accept: application/json' -H 'NX-ANTI-CSRF-TOKEN: 0.028119600179752124' -H 'X-Nexus-UI: true'" # 执行请求 local response=$(eval "$curlCmd") # 提取新continuationToken和组件信息 local newContinuationToken=$(echo "$response" | jq -r '.continuationToken // empty') local components=$(echo "$response" | jq -r '.items[] | {group, name, version, path: .assets[].path}') # 输出组件信息并保存到文件(可按需调整输出方式) echo "$components" >> components_info.json # 如果有新的continuationToken,则递归调用 if [[ "$newContinuationToken" != "" ]]; then echo "Fetching next page with continuationToken: $newContinuationToken" fetchComponents "$newContinuationToken" else echo "All components fetched." fi } # 初始化调用 fetchComponents "$continuationToken" echo "All component data has been collected. Check components_info.json for details." cat components_info.json | grep path | awk -F ':' '{print $2}' | cut -d "\"" -f 2 | sort | uniq > path1.txt cat path1.txt | awk -F'/[^/]*$' '{print $1}' | sort | uniq > path2.txt while IFS= read -r DIRNAME; do echo $DIRNAME if [ ! -d $DIRNAME ]; then mkdir -p $dir$DIRNAME fi done < path2.txt while IFS= read -r DIRNAME; do echo $DIRNAME DOWNLOAD_URL="$nexusurl/repository/$repository/$DIRNAME" if [ ! -f $DIRNAME ]; then wget $DOWNLOAD_URL -O $dir$DIRNAME fi done < path1.txt rm components_info.json rm path2.txt rm path1.txt
复制代码

 

posted @   VitoChen  阅读(114)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
levels of contents
点击右上角即可分享
微信分享提示