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



我正试图将项目发布到artifactory Maven repo,但我收到了以下错误(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

这是我的建筑.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("")
)

在artifactory端解决修改设置的解决方案不是一个选项,因为我不是存储库的管理员。

(也不介意为存储凭据提供更好的解决方案)

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

作为第二条注释的附带说明,您还可以将凭据直接配置到build.sbt中,而不是设置现有的环境变量,下面是一个示例:

publishTo:=Some("Artifactory Realm"位于http://localhost:8081/artifactory/")credentials+=凭据("Artifactory Realm"、"localhost"、"admin"、"password")

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

事实证明artifactory不喜欢我发布版本中的-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]

最新更新