当我发布自己的命令scalacSettings
时,我希望我的validate
更加严格(更加轻巧)。
实现此目标的最佳方法是什么?
一个新的作用域(strict
)确实起作用了,但是当您发布test
时,它需要将项目编译两次。所以这不是一个选择。
答案 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
。