1

我在 build.sbt 中定义我的构建/发布过程。我还有一个项目/Build.scala,它有一些在 build.sbt 中使用的定义。这样做是为了保持 build.sbt 的可读性。

我正在尝试向 releaseProcess 添加一些新任务。我在 Build.scala 中将这些任务定义为

object StartService {
  val myNewTask = taskKey[Unit]("Execute a CLI command")
  myNewTask := {
    streams.value.log.info(s"Executing command")
    s"cmd $arg1 $arg2" !
  }
}

build.sbt 有

releaseProcess := Seq[ReleaseStep](
...
  releaseStepTask(StartService.myNewTask)
...
)

执行发布命令时,我不断收到 myNewTask 未定义的异常。导入 Build.scala 中定义的任务的正确方法是什么?

java.lang.RuntimeException: / :myNewTask 未定义。在 scala.sys.package$.error(package.scala:27​​) at sbt.Extracted$$anonfun$getOrError$1.apply(Extracted.scala:94) at sbt.Extracted$$anonfun$getOrError$1.apply(Extracted. scala:94) 在 scala.Option.getOrElse(Option.scala:120)

4

1 回答 1

0

您需要将任务定义添加到您的项目中。仅仅通过在一个对象中,这不会发生。最简单的方法是将设置直接添加到 build.sbt 中。

要自动将其添加到多个项目中,您可以将其定义为项目目录中的插件:

object SbtScaryPlugin extends AutoPlugin {

  override def trigger = allRequirements
  override def requires = JvmPlugin

  object autoImport {
    val myNewTask = taskKey[Unit]("Execute a CLI command")
  }

  import autoImport._

  override lazy val projectSettings = Seq(
    myNewTask := {
      streams.value.log.info(s"Executing command")
      s"cmd $arg1 $arg2" !
    }
  )
}
于 2017-04-13T15:34:56.337 回答