我试图在公司防火墙后面运行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
答案 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")