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

Gradle构建获取Ivy仓库Node包时遭遇401认证失败求助

问题描述

我正在迁移至需要身份认证的Artifactory仓库,所有Maven模块通过在build.gradle中添加如下配置解决了构建时的401错误:

repositories {
  maven {
    url 'https://myhost.jfrog.io/artifactory/proj'
    credentials {
      username = "${artifactory_user}"
      password = "${artifactory_password}"
    }
  }
}

但在名为“foo”的项目执行nodeSetup任务时,获取Artifactory中Ivy类型的Node包仍出现401错误。我已为该包创建JFrog身份令牌,也尝试过硬编码账号密码,均无法解决问题。请问针对Ivy仓库的配置是否存在错误?

当前foo项目的build.gradle配置如下:

apply from: '../gradle/sharedProperties.gradle'

repositories {
  ivy {
    url 'https://myhost.jfrog.io/artifactory/ivy'
    credentials {
      username = "${artifactory_user}"
      password = "${artifactory_password}"
    }
  }
}

// Tells the node plugin & tasks to get dependencies from artifactory
node { distBaseUrl = 'https://myhost.jfrog.io/artifactory/ivy' }
tasks.withType(NodeTask) { args += ['--registry', 'https://myhost.jfrog.io/artifactory/api/npm/npm/'] }
tasks.withType(NpmTask) { args += ['--registry', 'https://myhost.jfrog.io/artifactory/api/npm/npm/'] }

报错信息:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':foo:nodeSetup'.
> Could not resolve all files for configuration ':foo:detachedConfiguration1'.
   > Could not resolve org.nodejs:node:14.17.6.
     Required by:
         project :foo
      > Could not resolve org.nodejs:node:14.17.6.
         > Could not get resource 'https://myhost.jfrog.io/artifactory/ivy/v14.17.6/node-v14.17.6-win-x64.zip'.
            > Could not HEAD 'https://myhost.jfrog.io/artifactory/ivy/v14.17.6/node-v14.17.6-win-x64.zip'. Received status code 401 from server: 
解决方案

你的核心问题是:nodeSetup任务通过distBaseUrl直接下载Node包时,没有带上你配置的Ivy仓库凭证;同时默认Ivy布局不匹配Node包的存储路径,导致依赖解析逻辑不生效。可以按以下步骤修复:

  • 调整Ivy仓库布局,匹配Node包路径
    从报错路径来看,Node包的存储结构是v[版本号]/node-v[版本号]-[平台].zip,默认Ivy布局无法识别这个结构,需要自定义布局规则:

    repositories {
      ivy {
        url 'https://myhost.jfrog.io/artifactory/ivy'
        credentials {
          username = "${artifactory_user}"
          password = "${artifactory_password}"
        }
        // 自定义布局匹配Node包的存储结构
        layout 'pattern', {
          artifact 'v[revision]/[module]-v[revision]-[classifier].[ext]'
        }
      }
    }
    
  • 移除distBaseUrl配置,让Gradle通过仓库解析Node包
    删掉node { distBaseUrl = 'https://myhost.jfrog.io/artifactory/ivy' }这一行,让Node插件使用你配置的Ivy仓库来解析org.nodejs:node:14.17.6依赖,这样就能自动带上凭证完成认证。

  • 验证账号权限
    确认你的账号/令牌对目标包路径有读取权限,可以用命令行测试:

    curl -u ${artifactory_user}:${artifactory_password} -I https://myhost.jfrog.io/artifactory/ivy/v14.17.6/node-v14.17.6-win-x64.zip
    

    如果返回401,需要在Artifactory后台给该账号/令牌添加对应Ivy仓库的读取权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:23:26