参考链接:

背景:

已经搭建Nexus3.6.0,需要迁移原有 两个 nexus2上的jar包 到nexus3统一管理。

分析:

  • Nexus2.x 服务器直接存储jar包
  • Nexus3.x 服务器存储的是二进制文件
  • 所以不能通过 copy原Nexus2.x服务器上的 repositories目录 到nexus3.X,刷新index方式来迁移。

迁移导入方法:

  1. 官方Upgrading
    具体实施可以参考上一篇blog。
    这种方法有两个小问题:
    - 需要原nexus版本为2.14.x版本
    - 每个nexus2导入都会在nexus3上面都会创建一个仓库,不适合有多个nexus2统一迁移到一个nexus3

  2. mvn deploy命令上传
    如果原nexus2待迁移的jar包并不多,可以使用这种方式。
    1. 只上传jar,自动生成pom.xml (独立jar,pom不需要依赖其它)
    mvn deploy:deploy-file -DgroupId=$groupId -DartifactId=$artifactId -Dversion=$version -Dpackaging=jar -DrepositoryId=nexus -Durl=http://$ip:8081/repository/$repository_name -Dfile=$path/XX.jar

    2. 上传jar 和 pom.xml (pom里面有依赖)
    mvn deploy:deploy-file -DgroupId=$groupId -DartifactId=$artifactId -Dversion=$version -DgeneratePom=false -Dpackaging=jar -DrepositoryId=nexus -Durl=http://$ip:8081/repository/$repository_name -DpomFile=$path/pom.xml -Dfile=$path/XX.jar
    需要注意:
    - 命令里面-DrepositoryId=nexus对应的是本机mvn settings.xml文件配置
    - 写脚本封装上面命令实现批量迁移

  3. http协议上传
    直接使用http put 文件到/repository/$repo-id/$path-of-file
    curl -v -u admin:admin123 –upload-file pom.xml http://$ip:8081/repository/maven-releases/org/foo/1.0/foo-1.0.pom
    我们需要上传的文件:jar和pom.xml

    创建 mavenimport.sh 脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash

# 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 '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' -exec curl -u $USERNAME:$PASSWORD -X PUT -v -T {} $REPO_URL{} \;
登陆到Nexus2.x服务器执行
    cd $releases_dir
    cp $path/mavenimport.sh .
    sh mavenimport.sh -u admin -p admin123 -r http://$ip:8081/repository/$release_repository_name

    cd $snapshots_dir
    cp $path/mavenimport.sh .
    sh mavenimport.sh -u admin -p admin123 -r http://$ip:8081/repository/$snapshots_repository_name

需要注意:
    - 上面命令里面 -u admin -p admin123 请更换成nexus管理员帐户密码 (nexus默认管理员/密码 admin/admin123)
    - 上面命令里面 $releases_dir 是指Nexus2.x服务器上存储releases仓库路径。
    - 上面命令里面 $snapshots_dir 是指Nexus2.x服务器上存储snapshots仓库路径。
    - 如果不切换到上面目录里面,那么上传的jar包 group_id会有问题。