You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

依赖AWS CodeArtifact的Maven项目本地正常,EC2构建遇授权错误

解决EC2上Maven访问AWS CodeArtifact的授权问题

核心问题拆解

你的本地配置逻辑没问题,但EC2环境下Maven要么没读到正确的settings.xml,要么CODEARTIFACT_AUTH_TOKEN环境变量没正确生成/传递,导致授权失败。

分步排查修复

1. 强制Maven读取指定的settings.xml

项目根目录的settings.xml不会自动被Maven识别,必须在构建命令里显式指定:

mvn clean install -s ./settings.xml

或者直接把settings.xml放到EC2实例的~/.m2/目录下,确保运行Maven的系统用户有读写权限。

2. 确保令牌环境变量正确生效

生成令牌后,必须让Maven进程能读到这个变量:

# 替换你的域、账户ID、区域
export CODEARTIFACT_AUTH_TOKEN=$(aws codeartifact get-authorization-token --domain mydomain --domain-owner <你的AWS账户ID> --region us-east-1 --query authorizationToken --output text)

运行Maven前先验证变量是否存在:

echo $CODEARTIFACT_AUTH_TOKEN

如果输出为空,说明令牌生成或变量赋值环节出问题了。

3. 修正settings.xml的profile激活逻辑

你同时把backend-prod和backend-test设为默认激活,Maven会同时从两个仓库拉依赖,容易引发冲突。改成按环境变量激活:

<profile>
  <id>backend-prod</id>
  <activation>
    <property>
      <name>env.PROFILE</name>
      <value>prod</value>
    </property>
  </activation>
  <!-- 原仓库配置保留 -->
</profile>
<profile>
  <id>backend-test</id>
  <activation>
    <property>
      <name>env.PROFILE</name>
      <value>test</value>
    </property>
  </activation>
  <!-- 原仓库配置保留 -->
</profile>

运行时指定环境:

export PROFILE=prod && mvn clean install -s ./settings.xml

4. 验证IAM角色的实际权限

不用给AWSCodeArtifactAdminAccess这么宽泛的权限,确保EC2的IAM角色有以下最小权限即可:

  • codeartifact:GetAuthorizationToken
  • codeartifact:ReadFromRepository
    在EC2上直接执行命令验证权限:
aws codeartifact get-authorization-token --domain mydomain --region us-east-1

如果能正常返回令牌,说明权限没问题;如果报错,检查IAM角色是否正确关联到EC2实例。

5. 确认工具版本兼容性

EC2上的Maven版本要在3.6以上(支持环境变量插值),同时确保AWS CLI是最新稳定版:

pip install --upgrade awscli

完整测试流程

  1. 在EC2上新建临时目录,复制项目代码和settings.xml
  2. 生成令牌并设置环境变量
  3. 显式指定settings.xml运行Maven构建
  4. 查看构建日志,定位具体的授权错误(比如401 Unauthorized),针对性调整

内容的提问来源于stack exchange,提问作者Bradley D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:37:24