这样可以编译,但是不会将scalacOptions添加到compile任务中。正确的方法是什么?

compileWall in ThisBuild := Def.task {
  scalacOptions += "-Xfatal-warnings"
  (compile in Compile).value
}.value

最佳答案

SBT设置在运行时中是不可变的,因此我们无法在自定义scalacOptions中更新Task

http://www.scala-sbt.org/0.13/docs/Full-Def.html#Reminder%3A+it%E2%80%99s+all+immutable

但是有一种方法可以通过创建自定义配置并将scalacOptions绑定(bind)到此配置中来在自定义Task中实现更改scalacOptions,例如:

lazy val MyCompile = config("MyCompile") extend Compile // customize config: MyCompile
configs(MyCompile) //configs
inConfig(MyCompile)(Defaults.configTasks) //inConfig and append the Defaults.configTasks

val compileWall = taskKey[Unit]("compileWall")

compileWall in ThisBuild := {
  (compile in MyCompile).value
}

scalacOptions in MyCompile := Seq("-Xfatal-warnings") // bind the scalacOptions in customize config.

关于scala - 更改当前sbt任务范围中的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43850398/

10-11 05:00