我想根据设置的值重新定义一个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)