【问题标题】:sbt dependency resolver with basic auth具有基本身份验证的 sbt 依赖解析器
【发布时间】:2012-07-21 03:53:24
【问题描述】:

我的 Maven 存储库具有基本授权的 nginx。

我的 build.sbt 有:

credentials += Credentials("maven repository", "rep.com", "sbt", "password")

resolvers ++= Seq(
  "maven repository" at "http://rep.com:8080/"
)

但是,sbt 找不到模块,因为 sbt 不使用基本授权。

我的 nginx 日志如下所示:

012/07/22 20:02:21 [error] 3338#0: *14 no user/password was provided for basic authentication, client: 8.32.39.29, server: rep.com, request: "HEAD /some/cool_2.9.1/0.1-SNAPSHOT/cool_2.9.1-0.1-SNAPSHOT.pom HTTP/1.1", host: "rep.com:8080"

我不想通过 nginx 发布工件。基本身份验证仅需要对工件进行受限访问。

如何在 sbt 中限制访问和使用存储库?

【问题讨论】:

  • 我发现 this discussion 可能会对您有所帮助,但是 IMO,它没有包含足够的细节来重现解决方案,所以如果有人会深入研究它并提供详细的答案,那就太好了.
  • 您能详细说明缺少哪些细节吗? Harald 在那个帖子中的回复对我来说似乎很简单:确保领域匹配。 sebastien 的回复建议使用系统属性javax.net.debug=all 来找出身份验证领域。

标签: sbt ivy basic-authentication


【解决方案1】:

如何将以下内容添加到您的 ~/.ivy2/.credentials 中:

realm=maven repository
host=rep.com:8080
user=username
password=password

然后使用Credentials(Path.userHome / ".ivy2" / ".credentials")

您需要确保您的领域配置正确:curl http://rep.com:8080 -vv 2>&1 | egrep "realm|host"(我可能弄错了,但“主机”可能必须匹配主机标头,即 rep.com:8080,而不仅仅是 rep.com)。

【讨论】:

  • 您不需要放入 .credentials 文件。我是主持人没有排队,这是问题所在。
  • 此方法现已添加到 SBT 文档中。 scala-sbt.org/0.13/docs/Publishing.html
  • grep 表达式未使用预期的大小写使用:curl rep.com:8080 -vv 2>&1 | egrep -i "realm|host" --> 结果应该是这样的 2 行: --> Host: nexus.eu --> WWW-Authenticate: BASIC realm="Sonatype Nexus Repository Manager"
【解决方案2】:

我在使用基本 AUTH 的 SVN 存储库中遇到了同样的问题。 这篇文章和上面提到的那个让我得到了我在下面总结的答案。

正如上面提到的关于正确处理领域的所有内容:

在 build.sbt 中,我将解析器设置如下:

resolvers += {
Credentials.add("<realm>", "<svnhost?", "<username>", "<password>")
Resolver.url("name", url("http://<svnhost>/<path>/"))(Resolver.ivyStylePatterns) 
}

为了找到作为 Credentials.add 的第一个参数的领域值,我做了

curl http://<svn host> -v

并使用了 WWW-Authenticate 标头中报告的 Basic Realm 值:

WWW-Authenticate: Basic realm="<realm>"

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    不知道它是否有效,但只是尝试在 URL 中添加基本身份验证:

    resolvers ++= Seq(
      "maven repository" at "http://username:password@rep.com:8080/"
    )
    

    【讨论】:

    • 似乎不适用于 SBT 1.2.8 或 SBT 1.3.9。
    猜你喜欢
    • 2016-01-09
    • 2018-12-20
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 2019-09-27
    • 2013-03-03
    • 1970-01-01
    相关资源
    最近更新 更多