运行sbt publish时,Artifactory为pom返回409

时间:2017-01-19 17:42:03

标签: maven sbt artifactory

我正在尝试将项目发布到神器Maven仓库,但我收到以下错误(409冲突):

[error] (kamon-cloudwatch/*:publish) java.io.IOException: PUT operation to URL https://[org].artifactoryonline.com/[org]/libs-release-local/kamon-cloudwatch/kamon-cloudwatch_2.11/0.6.5-SNAPSHOT/kamon-cloudwatch_2.11-0.6.5-SNAPSHOT.pom failed with status code 409: Conflict

这是我的build.sbt

中的相关部分
publishTo := sys.env.get("BUILD_NUMBER")
    .map(_ => Some("Artifactory Realm" at "https://[org].artifactoryonline.com/[org]/libs-snapshot-local;build.timestamp=" + new java.util.Date().getTime))
    .getOrElse(Some("Artifactory Realm" at "https://[org].artifactoryonline.com/[org]/libs-release-local")),
credentials += Credentials(
  "Artifactory Realm",
  "[org].artifactoryonline.com",
  sys.env.get("ARTIFACTORY_USER").getOrElse(""),
  sys.env.get("ARTIFACTORY_KEY").getOrElse("")
)

因为我不是存储库的管理员,因此不能选择在工件方面修改设置的解决方案。

(也不介意存储凭证的更好解决方案)

2 个答案:

答案 0 :(得分:2)

实际上,这是您可以配置的Artifactory中Maven / SBT存储库的设置。请尝试编辑存储库,方法是转到Admin-> Repositories-> Local,然后单击要尝试部署到的Maven存储库。然后,只需选中“处理快照”复选框以启用该存储库中的快照,或“处理版本”以允许发布,或两者都没有限制。

作为第二条评论的旁注,您还可以将凭证直接配置到build.sbt而不是设置环境变量,下面是一个示例:

  

publishTo:= Some(“http://localhost:8081/artifactory/”中的“Artifactory Realm”)   凭证+ =凭据(“Artifactory Realm”,“localhost”,“admin”,“密码”)

其中admin是用户,密码是密码。请注意,在文件中存储纯文本(或加密/ api密钥)密码存在潜在的安全风险。但是,由您决定管理安全性的最佳方法。

答案 1 :(得分:0)

在我的发布版本中,没有像-SNAPSHOT这样的神器。这就是我最终做的事情:

version := "0.6.5" + sys.env.get("BUILD_NUMBER").map("." + _ + "-SNAPSHOT").getOrElse(""),

publishTo := {
  if (isSnapshot.value) {
    Some("Artifactory Realm" at "https://[org].artifactoryonline.com/[org]/libs-snapshot-local")
  } else {
    Some("Artifactory Realm" at "https://[org].artifactoryonline.com/[org]/libs-release-local")
  }
},
credentials += Credentials(Path.userHome / ".ivy2" / ".credentials")

我的发布版本会将$BUILD_NUMBER留空,因此没有内部版本号或-SNAPSHOT因此现在可以使用。

这是.credentials文件的样子:

realm=Artifactory Realm
host=[org].artifactoryonline.com
user=[user]
password=[api-key]