我正在尝试访问需要一些基本身份验证的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)
Aus*_*mes 74
这就是我所做的(sbt 0.13 + artifactory - setup应该与nexus相似):
1)编辑了这里指定的文件〜/ .sbt/repositories:http://www.scala-sbt.org/0.13.0/docs/Detailed-Topics/Proxy-Repositories.html
[repositories]
local
my-ivy-proxy-releases: http://repo.company.com/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
my-maven-proxy-releases: http://repo.company.com/maven-releases/
Run Code Online (Sandbox Code Playgroud)
2)锁定我的神器以禁用匿名访问.
3)在〜/ .sbt/.credentials中创建了一个凭证文件
realm=Artifactory Realm
host=artifactory.mycompany.com
user=username
password=password
Run Code Online (Sandbox Code Playgroud)
4)在〜/ .sbt/0.13/plugins/credentials.sbt下创建一个文件,连接默认凭据
credentials += Credentials(Path.userHome / ".sbt" / ".credentials")
Run Code Online (Sandbox Code Playgroud)
现在,当我的项目加载sbt时,就像正常一样.
我这样做的原因是将存储库定义等保留在项目文件之外,以使团队具有灵活性(他们可以设置内部服务器来提供正在进行的工件等).
-Austen
Bry*_*ift 33
更新:这个答案在最近的sbt版本中不起作用 - 请参阅奥斯汀的答案.
好吧,我终于解决了这个问题.
snapshotsName可以是任何东西.realmin .credentials必须是HTTP身份验证领域,在尝试访问存储库的URL时显示(在我的情况下为nexus).realm也是第一个参数Credentials.add.那条线应该是
Credentials.add("Sonatype Nexus Repository Manager", "nexusHostIp", "nexususername", "nexuspassword")
Run Code Online (Sandbox Code Playgroud)
主机名只是ip或DNS名称.所以.credentials host只是nexusHostIp没有端口号.
所以工作项目配置是:
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)
使用.credentials文件,如下所示:
realm=Sonatype Nexus Repository Manager
host=nexusHostIp
user=nexususername
password=nexuspassword
Run Code Online (Sandbox Code Playgroud)
其中"Sonatype Nexus Repository Manager"是HTTP身份验证领域.
遵循SBT 文档:
有两种方法可以为此类存储库指定凭据:
credentials += Credentials("Some Nexus Repository Manager", "my.artifact.repo.net", "admin", "password123")
credentials += Credentials(Path.userHome / ".ivy2" / ".credentials")
Run Code Online (Sandbox Code Playgroud)
该.credentials文件是一个属性文件,其中包含域、主机、用户和密码的密钥。例如:
realm=Some Nexus Repository Manager
host=my.artifact.repo.net
user=admin
password=password123
Run Code Online (Sandbox Code Playgroud)
如果SBT启动程序无法从您的代理下载新版本的SBT,并且~/.sbt/boot/update.log显示您收到401身份验证错误,则可以使用环境变量SBT_CREDENTIALS指定常春藤凭据文件的位置.
这些都可以工作并下载新的sbt版本:
SBT_CREDENTIALS='/home/YOUR_USER_NAME/.ivy2/.credentials' sbtexport SBT_CREDENTIALS="/home/YOUR_USER_NAME/.ivy2/.credentials"你的.bashrc(或.zshrc),开始一个新的shell会话,然后运行sbt(您需要~/.ivy2/.credentials像其他答案一样设置文件)
资料来源:https://github.com/sbt/sbt/commit/96e5a7957c830430f85b6b89d7bbe07824ebfc4b
| 归档时间: |
|
| 查看次数: |
32659 次 |
| 最近记录: |