我有这个简单的命令可以更改myBoolSetting
:
commands += Command("mycommand") {
state ⇒ (Space ~> Bool).?
} { (state, arg) ⇒
val b = arg.getOrElse(true)
Project.extract(state).append(Seq(myBoolSetting in Global := b), state)
}
当我更改调用时,它确实会更改myBoolSetting
但我丢失了任何通过set command
更改了值的设置。
> set myStringSetting := "new value"
> myCommand false
在此示例中,myStringSetting
的值已丢失且具有默认值。
如何更改设置并保持手动更改设置?
更新:
发现相关问题:Why sbt.Extracted remove the previously defined TaskKey while append method?,但似乎不适用于我的情况。
修改后的代码:
commands += Command("mycommand") {
state ⇒ (Space ~> Bool).?
} { (state, arg) ⇒
val b = arg.getOrElse(true)
val session = Project.session(state)
val state2 = Project.extract(state).append(Seq(myBoolSetting in Global := b), state)
SessionSettings.reapply(session, state2)
}
答案 0 :(得分:1)
我可能只会部分回答你的问题。
失去myStringSetting
新值的原因是myCommand
有效地重新加载了一个会话,让您拥有类似build.sbt的文件以及命令本身设置的内容。您只需在重新加载会话时删除该值。
它类似于之后执行set scalaVersion := "2.11.7"
和reload
。 scalaVersion
成为sbt配置中的默认Scala版本。
你现在知道为什么你失去了价值。如果要保留值,则必须保存当前会话session save
并执行命令。您需要在命令中添加session save
。