条件scalacSettings / settingKey

时间:2019-01-22 14:02:32

标签: sbt

当我发布自己的命令scalacSettings时,我希望我的validate更加严格(更加轻巧)。

实现此目标的最佳方法是什么?

一个新的作用域(strict)确实起作用了,但是当您发布test时,它需要将项目编译两次。所以这不是一个选择。

1 个答案:

答案 0 :(得分:1)

SBT定制command允许临时修改构建状态,可以在命令完成后将其丢弃:

def validate: Command = Command.command("validate") { state =>
  import Project._
  val stateWithStrictScalacSettings =
    extract(state).appendWithSession(
      Seq(Compile / scalacOptions ++= Seq(
        "-Ywarn-unused:imports",
        "-Xfatal-warnings",
        "...",
      ))
      ,state
    )

  val (s, _) = extract(stateWithStrictScalacSettings).runTask(Test / test, stateWithStrictScalacSettings)
  s
}

commands ++= Seq(validate)

或更简洁地使用::便捷方法进行State转换:

commands += Command.command("validate") { state =>
  """set scalacOptions in Compile := Seq("-Ywarn-unused:imports", "-Xfatal-warnings", "...")""" :: 
  "test" :: state
} 

此方式,我们可以使用sbt test在开发过程中,而我们的CI挂钩插入sbt validate,它使用stateWithStrictScalacSettings