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

