发布到Apache Archiva的服务器在SBT中被未经授权拒绝?

时间:2014-03-03 20:04:09

标签: scala sbt archiva

我有一个多模块SBT项目,我试图发布到远程Apache Archiva。

[error] (core/*:publish) java.io.IOException: Access to URL http://XX.XX.XX.XX/repository/development/com/example/core_2.10/1.0.0.SNAPSHOT.304fcd73d72ffe4a05271197902c36b9a59b4922/core_2.10-1.0.0.SNAPSHOT.304fcd73d72ffe4a05271197902c36b9a59b4922.pom was refused by the server: Unauthorized

对于我的快照,我为提交添加了Git SHA-1哈希。

Build.scala

publishMavenStyle := true,
publishArtifact in Test := false,
pomIncludeRepository := { _ => true },
publishTo := Some("development" at "http://XX.XX.XX.X/repository/development"),
credentials += Credentials(Path.userHome / ".ivy2" / ".credentials_development"), // archiva credentials by repo

我注意按照我读过的帖子正确设置领域。我通过这样做检索它:

curl -X POST http://xx.xx.xx.xx/repository/development -v > /dev/null

.credentials_development

realm=Repository Archiva Managed development Repository
host=XX.XX.XX.XX
user=myuser
password=mypassword

在SBT,我跑:

compile
assembly
make-pom
package
publish

我可以通过网络管理使用用户上传工件。

我应该怎么做才能使出版有效?我是否需要通过ivysettings.xml设置凭据?

2 个答案:

答案 0 :(得分:4)

这个问题的评论让我得到答案:sbt: publish to corporate Nexus repository unauthorized

在凭证文件中的主机名上不能包含端口(我的Archiva服务器在端口8080上运行)。 它会阻止您的凭据在发布。

我还在我的publishTo中指定了域,并根据barnesjd的注释将我的凭据文件移动到〜/ .sbt(虽然不是插件,只是在〜。/ sbt中)。

供其他人参考,这是我的配置:

<强> Build.scala

publishTo := Some("Repository Archiva Managed development Repository" at "http://XX.XX.XX.XX:8080/respository/development/"),
credentials += Credentials(Path.userHome / ".sbt" / ".archiva_credentials")

<强> .archiva_credentials

realm=Repository Archiva Managed development Repository
host=XX.XX.XX.XX
user=myuser
password=mypassword

答案 1 :(得分:1)

我在工作中通过sbt发布到archiva没有问题。我记得有一个类似的令人沮丧的问题,这是因为我有错误的领域。假设你有正确的,我唯一看到的不同是我在~/.sbt/0.13/plugins/credentials.sbt中指定我的凭据。创建这样的文件,添加以下内容:

credentials ++= Seq(
  Credentials("Repository Archiva Managed development Repository",
              "XX.XX.XX.XX", 
              myuser,
              mypassword)
)

您可能需要删除当前的credentials设置以避免冲突。