使用Apache Ivy从AWS CodeArtifact拉取构件失败求助
问题:Apache Ivy无法从AWS CodeArtifact下载构件
环境配置
当前使用的ivysettings.xml配置如下:
<ivysettings> <properties file="${ivy.settings.dir}/ivysettings-file.properties"/> <settings defaultResolver="thechain"/> <credentials host="i****.d.codeartifact.us-west-2.amazonaws.com" username="aws" passwd="${CODEARTIFACT_AUTH_TOKEN}"/> <resolvers> <chain name="thechain"> <ibiblio name="central" m2compatible="true" root="https://repo1.maven.org/maven2/" /> <ibiblio name="codeartifact" m2compatible="true" root="https://i****.d.codeartifact.us-west-2.amazonaws.com/maven/****-repo/" checkconsistency="false"/> </chain> </resolvers> </ivysettings>
报错信息
拉取构件时出现未解析依赖错误:
[ivy:retrieve] ==== codeartifact: tried [ivy:retrieve] https://i***.d.codeartifact.us-west-2.amazonaws.com/maven/*-3.0.1-6.pom [ivy:retrieve] -- artifact com.viscount#alarmserver;3.0.1-6!alarmserver.jar: [ivy:retrieve] https://i***.d.codeartifact.us-west-2.amazonaws.com/maven/*-3.0.1-6.jar [ivy:retrieve] :::::::::::::::::::::::::::::::::::::::::::::: [ivy:retrieve] :: UNRESOLVED DEPENDENCIES :: [ivy:retrieve] :::::::::::::::::::::::::::::::::::::::::::::: [ivy:retrieve] :: com.*#*;3.0.1-6: not found [ivy:retrieve] ::::::::::::::::::::::::::::::::::::::::::::::
解决方案
1. 补全Credentials的Realm配置
AWS CodeArtifact的HTTP Basic认证Realm固定为CodeArtifact,必须显式配置,否则Ivy无法正确匹配认证信息。修改credentials节点:
<credentials host="i****.d.codeartifact.us-west-2.amazonaws.com" realm="CodeArtifact" username="aws" passwd="${CODEARTIFACT_AUTH_TOKEN}"/>
2. 强制Ibiblio使用Maven标准路径格式
从报错URL可以看到,Ivy生成的请求路径缺失了groupId的层级结构(如com/viscount/alarmserver),需要为codeartifact解析器添加pattern属性,强制遵循Maven仓库路径规则:
<ibiblio name="codeartifact" m2compatible="true" root="https://i****.d.codeartifact.us-west-2.amazonaws.com/maven/****-repo/" checkconsistency="false" pattern="[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]"/>
3. 验证认证令牌有效性
确保CODEARTIFACT_AUTH_TOKEN是通过AWS CLI正确生成的有效令牌(有效期12小时),生成命令示例:
aws codeartifact get-authorization-token --domain your-domain --domain-owner your-account-id --region us-west-2
4. 核对依赖坐标一致性
确认ivy.xml中的依赖坐标(groupId、artifactId、version)与CodeArtifact仓库中的构件完全匹配,比如com.viscount#alarmserver;3.0.1-6对应的仓库路径应为com/viscount/alarmserver/3.0.1-6/alarmserver-3.0.1-6.pom。
5. 启用调试日志排查细节
在Ant的ivy:retrieve任务中添加verbose="true",查看完整的请求日志,确认认证是否成功、请求URL是否正确:
<ivy:retrieve verbose="true" conf="compile"/>
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

