【问题标题】:execute a "release" command from inside a task in sbt从SBT中的任务中执行“释放”命令
【发布时间】:2016-04-05 19:29:15
【问题描述】:

我正在使用“sbt-releases”,需要从任务内部执行“release”,但问题是“release”是 command 而不是 task

那么是否可以从 sbt 的任务内部执行命令?

为什么我需要从任务内部执行发布?

如果满足某些条件,我想创建一个任务来执行发布,否则触发正常构建。我试图通过更改 sbt 中的 releaseProcess 来实现这一点,但问题是它是 SettingKey 而不是 taskKey,并且任务不能在设置中使用,因为设置在项目加载中被初始化一次。

【问题讨论】:

  • “我想创建一个任务”:改为命令,问题就解决了。或者有什么理由它必须是一项任务?
  • 我最终创建了一个命令,我避免了它,因为我认为命令必须在“build.scala”中,因为所有示例都使用这种方式,并且我避免在“build.scala”之间分散构建配置。 sbt”和“build.scala”,但事实证明它可以正常写在“built.sbt”中

标签: scala sbt sbt-release


【解决方案1】:

我最终创建了一个命令。谢谢@Seth Tisue

lazy val myproject = (project in file("myproject").
settings(
  commands += Command.command("releaseIfRequired") { state =>
    val (stateAfterTask, condition) = Project.extract(state).runTask(conditionTask, state)

    if (condition) {
      Parser.parse(" with-defaults", ReleaseKeys.releaseCommand.parser(stateAfterTask)) match {
        case Right(cmd) => cmd()
        case Left(msg) => throw sys.error(s"Error triggering release command:\n$msg")
      }
    }
    else {
      Project.extract(stateAfterTask).runTask(build, stateAfterTask)._1
    }
  }
)

【讨论】:

    猜你喜欢
    • 2012-10-07
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 2014-07-20
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多