16

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

4

3 回答 3

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

于 2012-09-13T14:21:37.550 回答
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>"

希望这可以帮助。

于 2015-01-07T09:22:37.613 回答
0

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

resolvers ++= Seq(
  "maven repository" at "http://username:password@rep.com:8080/"
)
于 2012-07-22T20:21:46.150 回答