我正在尝试将项目发布到神器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("")
)
因为我不是存储库的管理员,因此不能选择在工件方面修改设置的解决方案。
(也不介意存储凭证的更好解决方案)
答案 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]