【问题标题】:SBT Publish only when version does not existSBT 仅在版本不存在时发布
【发布时间】:2015-02-16 06:59:54
【问题描述】:

所以我在我的 CI 应用程序中有一份工作,当更改推送到应用程序上时,它会发布到 Nexus。

有没有办法让 ./sbt 发布幂等?因为有时我们因为临时问题想再次运行该作业,它会出错:

[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)

因为我们没有修改版本号。现在我要和一个hacky一起去:

./sbt publish || true

所以作业不会退出 1 并在 CI 中出错。有没有更好的办法?

【问题讨论】:

  • 恕我直言,这将是一个非常优雅的解决方案。我经常在交叉编译时发现我的 SBT 配置存在一些错误,并且需要发布被跳过的其他版本。我不想仅仅因为 Scala 2.10 已经存在而放弃发布 Scala 2.11 的工件。

标签: scala sbt ivy nexus


【解决方案1】:

你可以使用

isSnapshot := true

这仅允许覆盖文件。这种行为将来可能会改变。

【讨论】:

  • 在20160816有这个时间特性,所以我相信正常使用是安全的。
【解决方案2】:

您可以始终将版本作为构建的一部分进行引用,也可以通过 REST API 查询 Nexus,以在继续构建之前确定该版本是否已经存在。

【讨论】:

    猜你喜欢
    • 2012-09-27
    • 1970-01-01
    • 2013-01-24
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    相关资源
    最近更新 更多