我在build.sbt中定义我的构建/发布过程。我还有一个项目/Build.scala,它有一些在build.sbt中使用的定义。这样做是为了保持build.sbt的可读性。
我正在尝试向发布过程添加一些新任务。我在 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 is undefined. at scala.sys.package$.error(package.scala:27( 在SBT。Extracted$$anonfun$getOrError$1.apply(Extracted.scala:94( 在SBT。Extracted$$anonfun$getOrError$1.apply(Extracted.scala:94( 在斯卡拉。Option.getOrElse(Option.scala:120(
您需要将任务定义添加到项目中。仅仅通过在一个对象中,这不会发生。最简单的方法是将设置直接添加到 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" !
}
)
}