如何将私有Maven仓库(Artifactory)迁移至AWS CodeArtifact?
将私有Artifactory Maven仓库迁移到AWS CodeArtifact的实操方案
一、前置准备
- 本地安装Maven 3.6+、AWS CLI,且AWS CLI已配置具备CodeArtifact访问权限的凭证
- 在AWS CodeArtifact中创建匹配原Artifactory类型的仓库(如release/snapshot)及对应域
- 获取Artifactory的访问凭证(用户名/密码或API密钥),确保能拉取目标仓库内所有构件
二、批量迁移(适合大量构件)
1. 导出Artifactory构件清单
通过Artifactory REST API批量导出构件坐标:
curl -u your-artifactory-username:your-password "https://your-artifactory-instance/api/search/aql" -d 'items.find({"repo":"target-artifactory-repo"}).include("group","name","version","packaging")' > artifacts.json
将导出的JSON文件转换为每行包含groupId:artifactId:version:packaging格式的文本文件(可通过Python/jq等工具处理),例如:
com.example:common-lib:1.0.0:jar com.example:service-core:2.1.0:war
2. 批量迁移脚本
先配置CodeArtifact的Maven登录,再循环执行拉取+上传操作:
# 登录CodeArtifact,自动配置Maven settings aws codeartifact login --tool maven --domain your-codeartifact-domain --domain-owner your-aws-account-id --repository your-codeartifact-repo # 读取构件清单,逐个迁移 while IFS=: read -r groupId artifactId version packaging; do # 从Artifactory拉取构件到本地仓库 mvn dependency:get -DgroupId=$groupId -DartifactId=$artifactId -Dversion=$version -Dpackaging=$packaging -DremoteRepositories=artifactory::default::https://your-artifactory-instance/target-artifactory-repo # 上传到CodeArtifact artifact_path="${groupId//./\/}/${artifactId}/${version}/${artifactId}-${version}.${packaging}" mvn deploy:deploy-file \ -DgroupId=$groupId \ -DartifactId=$artifactId \ -Dversion=$version \ -Dpackaging=$packaging \ -Dfile="${HOME}/.m2/repository/${artifact_path}" \ -Durl=https://your-codeartifact-domain-your-aws-account-id.d.codeartifact.your-region.amazonaws.com/maven/your-codeartifact-repo/ \ -DrepositoryId=codeartifact done < artifacts-list.txt
三、手动迁移(适合少量构件)
1. 配置Maven settings.xml
添加Artifactory和CodeArtifact的服务器及仓库配置:
<settings> <servers> <server> <id>artifactory-repo</id> <username>your-artifactory-username</username> <password>your-artifactory-password</password> </server> <server> <id>codeartifact-repo</id> <username>aws</username> <password>${env.CODEARTIFACT_AUTH_TOKEN}</password> </server> </servers> <profiles> <profile> <id>migrate-profile</id> <repositories> <repository> <id>artifactory-repo</id> <url>https://your-artifactory-instance/target-artifactory-repo</url> </repository> </repositories> </profile> </profiles> </settings>
2. 拉取并部署构件
# 从Artifactory拉取构件到本地 mvn dependency:get -DgroupId=com.example -DartifactId=your-artifact -Dversion=1.0.0 -Dpackaging=jar -P migrate-profile # 获取CodeArtifact临时授权令牌 export CODEARTIFACT_AUTH_TOKEN=$(aws codeartifact get-authorization-token --domain your-codeartifact-domain --domain-owner your-aws-account-id --query authorizationToken --output text) # 部署到CodeArtifact mvn deploy:deploy-file \ -DgroupId=com.example \ -DartifactId=your-artifact \ -Dversion=1.0.0 \ -Dpackaging=jar \ -Dfile="${HOME}/.m2/repository/com/example/your-artifact/1.0.0/your-artifact-1.0.0.jar" \ -Durl=https://your-codeartifact-domain-your-aws-account-id.d.codeartifact.your-region.amazonaws.com/maven/your-codeartifact-repo/ \ -DrepositoryId=codeartifact-repo
四、关键注意事项
- 快照构件处理:若原仓库包含SNAPSHOT版本,需确保CodeArtifact仓库已开启快照支持,迁移时保留版本号中的
SNAPSHOT后缀,Maven会自动处理时间戳版本 - 权限验证:AWS用户需具备
codeartifact:PutPackageVersion、codeartifact:ReadFromRepository等权限;Artifactory用户需具备目标仓库的读取权限 - 完整性校验:迁移完成后,选取核心构件验证依赖拉取是否正常,避免遗漏间接依赖
- 大文件优化:针对大构件,可调整Maven的
http.connectionTimeout和http.socketTimeout参数,避免传输中断
内容的提问来源于stack exchange,提问作者user1924035
相关产品推荐
相关产品推荐

