尝试从 Artifactory 虚拟存储库下载时,SBT 无法找到凭据
SBT is unable to find credentials when attempting to download from an Artifactory virtual repo
我正在尝试 运行 在公司防火墙后面进行 SBT。另一个团队配置了一个 Artifactory 代理。此代理在匿名访问打开时工作正常,但当我们让它需要密码时,认为开始出错。
当我在工作站上 运行 SBT 时,出现以下错误:
[error] Unable to find credentials for [Artifactory Realm @ coderepo.xxx.amrs.bigco.com]
结果是我不能 bootstrap sbt:
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: UNRESOLVED DEPENDENCIES ::
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: org.scala-lang#scala-library;2.10.6: not found
[warn] :: org.scala-sbt#sbt;0.13.12: not found
[warn] :: org.scala-lang#scala-compiler;2.10.6: not found
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
我试过在 ~/.sbt 和 ~/.ivy2 中放置一个 .credentials 文件:我一直在测试以下变体,所有这些都不起作用:
realm=Artifactory Realm @ coderepo.xxx.amrs.bigco.com
host=coderepo.xxx.amrs.bigco.com
user=<username>
password=<pwd>
我猜这个错误意味着它无法找到与领域匹配的凭据定义,所以我在两个位置都尝试了第一行的多个版本:
realm=Artifactory Realm
realm=[Artifactory Realm @ coderepo.xxx.amrs.bigco.com]
realm=coderepo.xxx.amrs.bigco.com
None 其中似乎没有任何影响。
那么允许 SBT 使用用户名和密码对受密码保护的 Artifactory 存储库进行身份验证的正确方法是什么?
UPDATE0:根据 Ivy 文档,最有可能的域名就是 "Artifactory Realm"。根据 SBT 文档,凭证文件的正确默认位置应该是 %USERPROFILE%/.sbt/.credentials(是的,我正在使用 Windows)。即使删除了我的 .ivy2 目录中的 .credentials 文件,它仍然不起作用。
UPDATE1:相关但实际上没有帮助:
- Sbt can't authorize in Artifactory
UPDATE2:我开始怀疑这是 sbt 中的错误 - 我在这里添加了一个问题:https://github.com/sbt/sbt/issues/2817
有关如何配置全局凭据的详细信息,请参阅 this question。
总结一下:
如果您需要从代理存储库启动 SBT,请将系统 属性 sbt.boot.credentials
设置为指向您的凭据文件。您可以在 %CSIDL_PROGRAM_FILESX86%/sbt/conf/sbtconfig.txt
中执行此操作,例如:
-Dsbt.boot.credentials=/Users/my-user-name/.sbt/credentials
或者,您可以使用 SBT_CREDENTIALS
环境变量来达到同样的目的。
对于 Artifactory,credentials
文件中的领域应设置为:
realm=Artifactory Realm
为了验证依赖项工件检索,创建一个类似 %USERPROFILE%/.sbt/0.13/plugins/my-credentials.sbt
的文件并设置 credentials
。例如:
credentials += Credentials(Path.userHome / ".sbt" / "credentials")
我认为该文件的默认位置是 ${HOME}/.sbt/<sbt-version>/.credentials
;虽然我相信有关于此的已发布文档,但我通过点击代码确认了这一点。
@salim-fadhley,看起来你在路径中缺少 SBT 版本。
EDIT: You need to add DefaultOptions.addCredentials
to your build.sbt; you can then verify what SBT picks up with show credentials
.
撇开文件位置不谈,存储库名称(毫无意义)与安全领域(意味着一切)之间似乎存在混淆。
从存储库服务器返回的身份验证质询将包括安全领域的名称;作为 client/developer,您无法控制它是什么,我的猜测是它必须与您 (client/developer) 在 .credentials
中指定的 领域 相匹配] 文件(无论在哪里)。
同时,存储库名称(如 build.sbt
中所述)实际上对相应项目开发之外的任何人都没有任何意义,例如存储库服务器管理员无法关心从一个项目到下一个项目。
环境详情-
Operating System - MacOS Catalina
exampleUser@exampleUser-mbp-2 plugins % sbt -version
sbt version in this project: 1.4.7
sbt script version: 1.4.7
exampleUser@exampleUser-mbp-2 plugins % scala -version
Scala code runner version 2.11.12 -- Copyright 2002-2017, LAMP/EPFL
用户HOME
目录-
exampleUser@exampleUser-mbp-2 plugins % echo $HOME
/Users/exampleUser
credentials.sbt
文件的位置 - $HOME/.sbt/1.0/plugins
.credentials
文件存储 username/password
组合并被 Artifactory
用于验证。
我们应该在credentials.sbt
文件中输入.credentials
文件的位置。
示例条目如下-
exampleUser-mbp-2:plugins exampleUser$ cat $HOME/.sbt/1.0/plugins/credentials.sbt
credentials += Credentials(Path.userHome / ".sbt" / ".credentials")
我正在尝试 运行 在公司防火墙后面进行 SBT。另一个团队配置了一个 Artifactory 代理。此代理在匿名访问打开时工作正常,但当我们让它需要密码时,认为开始出错。
当我在工作站上 运行 SBT 时,出现以下错误:
[error] Unable to find credentials for [Artifactory Realm @ coderepo.xxx.amrs.bigco.com]
结果是我不能 bootstrap sbt:
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: UNRESOLVED DEPENDENCIES ::
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: org.scala-lang#scala-library;2.10.6: not found
[warn] :: org.scala-sbt#sbt;0.13.12: not found
[warn] :: org.scala-lang#scala-compiler;2.10.6: not found
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
我试过在 ~/.sbt 和 ~/.ivy2 中放置一个 .credentials 文件:我一直在测试以下变体,所有这些都不起作用:
realm=Artifactory Realm @ coderepo.xxx.amrs.bigco.com
host=coderepo.xxx.amrs.bigco.com
user=<username>
password=<pwd>
我猜这个错误意味着它无法找到与领域匹配的凭据定义,所以我在两个位置都尝试了第一行的多个版本:
realm=Artifactory Realm
realm=[Artifactory Realm @ coderepo.xxx.amrs.bigco.com]
realm=coderepo.xxx.amrs.bigco.com
None 其中似乎没有任何影响。
那么允许 SBT 使用用户名和密码对受密码保护的 Artifactory 存储库进行身份验证的正确方法是什么?
UPDATE0:根据 Ivy 文档,最有可能的域名就是 "Artifactory Realm"。根据 SBT 文档,凭证文件的正确默认位置应该是 %USERPROFILE%/.sbt/.credentials(是的,我正在使用 Windows)。即使删除了我的 .ivy2 目录中的 .credentials 文件,它仍然不起作用。
UPDATE1:相关但实际上没有帮助:
- Sbt can't authorize in Artifactory
UPDATE2:我开始怀疑这是 sbt 中的错误 - 我在这里添加了一个问题:https://github.com/sbt/sbt/issues/2817
有关如何配置全局凭据的详细信息,请参阅 this question。
总结一下:
如果您需要从代理存储库启动 SBT,请将系统 属性 sbt.boot.credentials
设置为指向您的凭据文件。您可以在 %CSIDL_PROGRAM_FILESX86%/sbt/conf/sbtconfig.txt
中执行此操作,例如:
-Dsbt.boot.credentials=/Users/my-user-name/.sbt/credentials
或者,您可以使用 SBT_CREDENTIALS
环境变量来达到同样的目的。
对于 Artifactory,credentials
文件中的领域应设置为:
realm=Artifactory Realm
为了验证依赖项工件检索,创建一个类似 %USERPROFILE%/.sbt/0.13/plugins/my-credentials.sbt
的文件并设置 credentials
。例如:
credentials += Credentials(Path.userHome / ".sbt" / "credentials")
我认为该文件的默认位置是 ${HOME}/.sbt/<sbt-version>/.credentials
;虽然我相信有关于此的已发布文档,但我通过点击代码确认了这一点。
@salim-fadhley,看起来你在路径中缺少 SBT 版本。
EDIT: You need to add
DefaultOptions.addCredentials
to your build.sbt; you can then verify what SBT picks up withshow credentials
.
撇开文件位置不谈,存储库名称(毫无意义)与安全领域(意味着一切)之间似乎存在混淆。
从存储库服务器返回的身份验证质询将包括安全领域的名称;作为 client/developer,您无法控制它是什么,我的猜测是它必须与您 (client/developer) 在 .credentials
中指定的 领域 相匹配] 文件(无论在哪里)。
同时,存储库名称(如 build.sbt
中所述)实际上对相应项目开发之外的任何人都没有任何意义,例如存储库服务器管理员无法关心从一个项目到下一个项目。
环境详情-
Operating System - MacOS Catalina
exampleUser@exampleUser-mbp-2 plugins % sbt -version
sbt version in this project: 1.4.7
sbt script version: 1.4.7
exampleUser@exampleUser-mbp-2 plugins % scala -version
Scala code runner version 2.11.12 -- Copyright 2002-2017, LAMP/EPFL
用户HOME
目录-
exampleUser@exampleUser-mbp-2 plugins % echo $HOME
/Users/exampleUser
credentials.sbt
文件的位置 - $HOME/.sbt/1.0/plugins
.credentials
文件存储 username/password
组合并被 Artifactory
用于验证。
我们应该在credentials.sbt
文件中输入.credentials
文件的位置。
示例条目如下-
exampleUser-mbp-2:plugins exampleUser$ cat $HOME/.sbt/1.0/plugins/credentials.sbt
credentials += Credentials(Path.userHome / ".sbt" / ".credentials")