sbt依赖解析器与基本身份验证

时间:2012-07-22 20:08:10

标签: sbt ivy basic-authentication

我的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中限制访问和使用存储库?

3 个答案:

答案 0 :(得分:20)

如何将以下内容添加到〜/ .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)

HTH

答案 1 :(得分: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>"

希望这会有所帮助。

答案 2 :(得分:-1)

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

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