尝试从Artifactory虚拟仓库下载时,SBT无法找到凭据

时间:2016-10-24 18:18:55

标签: scala sbt artifactory

我试图在公司防火墙后面运行SBT。另一个团队配置了Artifactory代理。这个代理在打开匿名访问时工作正常,但是当我们让它需要密码时,认为开始出错。

当我在工作站上运行SBT时,出现以下错误:

[error] Unable to find credentials for [Artifactory Realm @ coderepo.xxx.amrs.bigco.com]

结果是我无法引导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

这些似乎都没有任何影响。

那么允许SBT使用用户名&amp;进行身份验证的正确方法是什么?密码受密码保护的Artifactory存储库?

UPDATE0 :根据常春藤文档,最可能的领域名称只是&#34; Artifactory Realm&#34;。根据SBT文档,凭证文件的正确默认位置应为%USERPROFILE%/。sbt / .credentials(是的,我使用Windows)。即使删除.ivy2目录中的.credentials文件,它仍然无法正常工作。

UPDATE1 :相关但实际上并没有帮助:

UPDATE2 :我开始怀疑这是sbt中的错误 - 我在这里添加了一个问题:https://github.com/sbt/sbt/issues/2817

3 个答案:

答案 0 :(得分:12)

有关如何配置全局凭据的详细信息,请参阅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")

答案 1 :(得分:2)

我认为该文件的默认位置是${HOME}/.sbt/<sbt-version>/.credentials;尽管我相信有关于此的已发布文档,但我还是通过在代码中单击来确认了这一点。
@ salim-fadhley,看来您在路径中缺少SBT版本。

  

编辑:您需要将DefaultOptions.addCredentials添加到build.sbt中;然后,您可以使用show credentials来验证SBT收到了什么。

撇开文件位置,存储库名称(什么也没有)与安全领域(意味着所有)之间似乎有些混乱。

从存储库服务器返回的身份验证挑战将包括安全领域的名称;作为客户/开发人员,您无法控制它的内容,我想它必须与您(客户/开发人员)在.credentials文件中指定的领域相符(无论在哪里)

与此同时,存储库名称(如build.sbt中所示)实际上对相应项目的外部开发人员没有任何意义,例如存储库服务器管理员不在乎从一个项目到下一个项目。

答案 2 :(得分:0)

有关环境的详细信息-

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 文件中输入 credentials.sbt 文件的位置。

示例条目如下 -

exampleUser-mbp-2:plugins exampleUser$ cat $HOME/.sbt/1.0/plugins/credentials.sbt 
credentials += Credentials(Path.userHome / ".sbt" / ".credentials")