SBT仅在版本不存在时发布

时间:2014-12-17 16:42:27

标签: scala sbt ivy nexus

所以我在我的CI应用程序中找到了一份工作,当应用程序在应用程序上进行开发时,该应用程序会发布到Nexus。

有没有办法使./sbt发布幂等?因为偶尔我们想要因为临时问题而再次运行作业,并且它会出错:&/ p>

[16:31:24]java.io.IOException: destination file exists and overwrite == false
[16:31:24]  at org.apache.ivy.plugins.repository.url.URLRepository.put(URLRepository.java:75)
[16:31:24]  at org.apache.ivy.plugins.repository.AbstractRepository.put(AbstractRepository.java:130)
[16:31:24]  at sbt.ConvertResolver$ChecksumFriendlyURLResolver$class.put(ConvertResolver.scala:78)
[16:31:24]  at sbt.ConvertResolver$PluginCapableResolver$1.put(ConvertResolver.scala:103)
[16:31:24]  at org.apache.ivy.plugins.resolver.RepositoryResolver.publish(RepositoryResolver.java:216)

因为我们没有碰到版本号。现在我和哈克一起去了:

./sbt publish || true

因此,作业不会退出1并且CI中出错。还有更好的方法吗?

2 个答案:

答案 0 :(得分:14)

您可以使用

isSnapshot := true

这只允许覆盖文件。这种行为似乎可能在未来发生变化。

答案 1 :(得分:0)

您可以随时通过REST API将版本作为构建的一部分引用或查询Nexus,以确定在继续构建之前版本是否已存在。