使用Maven连接AWS CodeArtifact仓库失败,请求排查原因
解决Maven无法连接AWS CodeArtifact仓库的问题
可能的原因及排查方案
1. 代理配置冲突
如果环境中配置了HTTP代理,但未将CodeArtifact域名加入非代理列表,Maven会尝试通过代理访问导致连接无响应,而curl可能使用了不同的代理规则(如系统默认或无代理)所以能成功。
- 检查
settings.xml中的<proxy>节点,添加CodeArtifact域名到非代理主机:
<proxy> <id>default-proxy</id> <active>true</active> <protocol>https</protocol> <host>your-proxy-host</host> <port>your-proxy-port</port> <nonProxyHosts>*.codeartifact.us-east-1.amazonaws.com|localhost</nonProxyHosts> </proxy>
- 临时禁用代理测试:执行Maven命令时附加参数:
mvn deploy:deploy-file -Dhttp.proxyHost= -Dhttp.proxyPort= -Dhttps.proxyHost= -Dhttps.proxyPort=
2. SSL/TLS协议兼容性问题
Maven 3.6.3依赖的JDK版本可能默认禁用了CodeArtifact要求的TLS 1.2+协议,导致连接失败。
- 查看Maven使用的JDK版本:执行
mvn -v,确保是Java 8u161及以上版本(该版本默认启用TLS 1.2)。 - 强制Maven使用TLS 1.2:
mvn deploy:deploy-file -Dhttps.protocols=TLSv1.2
3. settings.xml配置不匹配
server、repository、mirror的ID必须完全一致,否则Maven无法正确加载认证信息,导致连接失败。
- 确保配置中ID统一,示例:
<!-- server节点 --> <server> <id>codeartifact-repo</id> <username>aws</username> <password>${env.CODEARTIFACT_AUTH_TOKEN}</password> </server> <!-- repository节点 --> <repository> <id>codeartifact-repo</id> <url>https://my-domain-XXXXXX.d.codeartifact.us-east-1.amazonaws.com/maven/my-repo/</url> </repository>
- 临时注释
<mirror>节点,排除镜像规则覆盖CodeArtifact仓库的可能。
4. Deploy插件版本兼容性
你使用的maven-deploy-plugin 3.0.0可能存在兼容性问题,尝试升级插件版本:
mvn org.apache.maven.plugins:maven-deploy-plugin:3.1.1:deploy-file \ -Dfile=your-artifact.jar \ -DgroupId=com.example \ -DartifactId=your-artifact \ -Dversion=1.0.0 \ -DrepositoryId=codeartifact-repo \ -Durl=https://my-domain-XXXXXX.d.codeartifact.us-east-1.amazonaws.com/maven/my-repo/
5. 环境变量未正确传递
如果使用环境变量CODEARTIFACT_AUTH_TOKEN,需确保Maven进程能读取到该变量:
- 在执行Maven命令的终端中,先执行
echo $CODEARTIFACT_AUTH_TOKEN确认变量存在。 - 若通过IDE运行Maven,需在IDE的环境变量配置中手动添加该变量。
验证步骤
每次修改配置后,先执行mvn verify -DskipTests测试仓库连接,确认配置生效后再执行deploy命令。
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

