我正在尝试访问需要一些基本身份验证的Nexus存储库管理器.从Maven2开始,一切正常,但是当我尝试在SBT中配置时,它找不到工件.它使用的是自定义存储库模式(请参阅此相关问题),但我认为这不重要.在任何情况下,相关配置都在这里.
Project.scala:
val snapshotsName = "Repository Snapshots"
val snapshotsUrl = new java.net.URL("http://nexusHostIp:8081/nexus/content/repositories/snapshots")
val snapshotsPattern = "[organisation]/[module]/[revision]-SNAPSHOT/[artifact]-[revision](-[timestamp]).[ext]"
val snapshots = Resolver.url(snapshotsName, snapshotsUrl)(Patterns(snapshotsPattern))
Credentials(Path.userHome / ".ivy2" / ".credentials", log)
val dep = "group" % "artifact" % "0.0.1" extra("timestamp" -> "20101202.195418-3")
Run Code Online (Sandbox Code Playgroud)
〜/ .ivy2/.credentials:
realm=Snapshots Nexus
host=nexusHostIp:8081
user=nexususername
password=nexuspassword
Run Code Online (Sandbox Code Playgroud)
根据SBT用户组中的类似讨论,这应该可以正常工作,但是当我尝试构建时,我得到以下内容.
==== Repository Snapshots: tried
[warn] -- artifact group#artifact;0.0.1!artifact.jar:
[warn] http://nexusHostIp:8081/nexus/content/repositories/snapshots/group/artifact/0.0.1-SNAPSHOT/artifact-0.0.1-20101202.195418-3.jar
Run Code Online (Sandbox Code Playgroud)
我相当肯定这是一个凭证问题,而不是别的因为我可以点击它说它正在尝试的URL并下载jar(在验证之后).
我也试过内联声明凭证(即使它不太理想),如下所示:
Credentials.add("Repository Snapshots", "nexusHostIp", "nexususername", "nexuspassword")
Run Code Online (Sandbox Code Playgroud) 我正试图在公司防火墙后面运行SBT.另一个团队配置了Artifactory代理.这个代理可以正常启用匿名访问,但是当我们让它需要密码时,认为开始出错了.
当我在工作站上运行SBT时,出现以下错误:
[error] Unable to find credentials for [Artifactory Realm @ coderepo.xxx.amrs.bigco.com]
Run Code Online (Sandbox Code Playgroud)
结果是我无法引导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] ::::::::::::::::::::::::::::::::::::::::::::::
Run Code Online (Sandbox Code Playgroud)
我已经尝试在./ .sbt和〜/ .ivy2中放置一个.credentials文件:我一直在测试以下内容的变体,所有这些都不起作用:
realm=Artifactory Realm @ coderepo.xxx.amrs.bigco.com
host=coderepo.xxx.amrs.bigco.com
user=<username>
password=<pwd>
Run Code Online (Sandbox Code Playgroud)
我猜这个错误意味着它无法找到与领域匹配的凭据定义,所以我在两个位置尝试了第一行的多个版本:
realm=Artifactory Realm
realm=[Artifactory Realm @ coderepo.xxx.amrs.bigco.com]
realm=coderepo.xxx.amrs.bigco.com
Run Code Online (Sandbox Code Playgroud)
这些似乎都没有任何影响.
那么,允许SBT使用用户名和密码对受密码保护的Artifactory存储库进行身份验证的正确方法是什么?
UPDATE0:根据常春藤文档,最可能的领域名称只是"Artifactory Realm".根据SBT文档,凭证文件的正确默认位置应为%USERPROFILE%/.sbt/.credentials(是的,我使用的是Windows).即使在删除.ivy2目录中的.credentials文件后,它仍然无效.
更新1:相关但实际上并没有帮助:
UPDATE2:我开始怀疑这是sbt中的一个错误 - 我在这里添加了一个问题:https://github.com/sbt/sbt/issues/2817
我的组织使用JFROG artifactory来分发所有罐子.
到目前为止,我一直使用SBT进行Scala开发.但是现在当我在寻找将SBT构建的罐子发布到JFROG神器中的方法时,我只在github上找到了这个插件,它处于"alpha"状态
https://github.com/JFrogDev/artifactory-sbt-plugin
我想知道这个插件是否是从sbt到jFrog artifactory发布jar的唯一方法?或者有更好的手段.
因为这个插件说它在alpha中...我不认为我的组织会准备好使用它.
使用artifactory和scala时其他人在做什么?你使用maven xml来构建和发布jar到artifactory?