相关疑难解决方法(0)

根据设置重新定义sbt任务

我想根据设置的值重新定义一个sbt任务.在默认情况下,它应该执行原始任务,在另一种情况下,我想运行自定义任务.

给定任务和设置:

val someSetting = Def.settingKey[Boolean]("some setting")
val fooTask = Def.taskKey[String]("foo task")

someSetting := true

fooTask := {
  println("** foo effect **")
  "foo value"
}
Run Code Online (Sandbox Code Playgroud)

试图重新定义fooTask:

fooTask := {
  if( someSetting.value ) fooTask
  else Def.task("whatever")
}.value
Run Code Online (Sandbox Code Playgroud)

给出编译错误:

build.sbt:39: error: Illegal dynamic dependency
  if( someSetting.value ) fooTask
      ^
Run Code Online (Sandbox Code Playgroud)

使用Def.task任务编译......

fooTask := Def.task {
  if( someSetting.value ) fooTask.value
  else Def.task("whatever").value
}.value
Run Code Online (Sandbox Code Playgroud)

......但即使someSetting是假的也会被执行!

> set someSetting := false
[info] Defining *:someSetting
[info] The new value will be used by …
Run Code Online (Sandbox Code Playgroud)

scala sbt

3
推荐指数
1
解决办法
729
查看次数

标签 统计

sbt ×1

scala ×1