0

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

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

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

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

4

1 回答 1

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
    }
  }
)
于 2016-01-02T07:52:49.547 回答