我们假设以下自动插件:
import sbt._
import Keys._
object TestPlugin extends AutoPlugin {
object autoImport {
val myTask = TaskKey[Unit]("myTask", "It's just a task")
}
import autoImport._
override def trigger = allRequirements
def doSomething = (streams) map { (s) =>
s.log.info(s"Something...")
}
override lazy val buildSettings = Seq(
myTask <<= doSomething
)
}
我希望这个插件在编译之前运行。当我输入sbt控制台compile
时,此插件运行(在实际编译发生之前)
我可以在我将使用此插件的项目的sbt配置中使用以下内容:
(compile in Compile) <<= (compile in Compile) dependsOn myTask
但是,我宁愿让插件附加到编译过程中,而不必在我将使用我的插件的每个项目中明确声明它。
如果我尝试在我的插件buildSettings
之前复制该行,则会收到错误:
[error] {.}/compile:compile from {.}/compile:compile ((TestPlugin) TestPlugin.scala:32)
[error] Did you mean compile:compile ?
知道如何才能让它发挥作用吗?
此致
答案 0 :(得分:1)
您需要覆盖projectSettings
而不是buildSettings
。这样,设置将应用于单个项目的范围,而该项目又应已定义compile:compile
设置并添加行
(compile in Compile) <<= (compile in Compile) dependsOn myTask
到projectSettings
应按预期工作。