附上sbt插件来编译生命周期

时间:2015-04-08 21:04:31

标签: scala sbt

我们假设以下自动插件:

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 ?

知道如何才能让它发挥作用吗?

此致

1 个答案:

答案 0 :(得分:1)

您需要覆盖projectSettings而不是buildSettings。这样,设置将应用于单个项目的范围,而该项目又应已定义compile:compile设置并添加行

(compile in Compile) <<= (compile in Compile)  dependsOn myTask

projectSettings应按预期工作。