如何为构建应用程序的当前事件创建sbt插件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何为构建应用程序的当前事件创建sbt插件?相关的知识,希望对你有一定的参考价值。

我有这个hello world插件:

object HelloPlugin extends AutoPlugin {

  object autoImport {
    val sayHello: TaskKey[Unit] = TaskKey("saying hello")
  }

  import autoImport._
  override def projectSettings = Seq(

    sayHello := {
      println("------------------------------------ heeeeeeeeeeeeeeeelooooooooo -------------------")
    }
  )

}

我想在编译时之前和之后使用我的sayHello任务。我该怎么做?

我找到了relative question,但它不是关于AutoPlugin扩展。

答案

你只需要根据自己的情况调整答案。答案保持不变:使用dependsOn,而不是build.sbt,你将它添加到你的插件的projectSettings

override def projectSettings = Seq(
  sayHello := { ... },
  Compile/compile := (Compile/compile).dependsOn(sayHello).value
)
另一答案

你需要覆盖compile TaskKey,如:

override def projectSettings: Seq[Def.Setting[_]] = Seq(
    compile in Compile := Def.taskDyn {
          hello.value // call before
          val c = (compile in Compile).value // actual compilation
          Def.task {
            hello.value // call after
            c
          }
        }.value
)

def hello: Def.Initialize[Task[Unit]] = Def.task {
   println("hello")
}

文件:https://www.scala-sbt.org/1.0/docs/Howto-Dynamic-Task.html#build.sbt+v2

以上是关于如何为构建应用程序的当前事件创建sbt插件?的主要内容,如果未能解决你的问题,请参考以下文章

SBT - 如何为特定任务禁用插件(例如“包”)

如何为 appJS/appJVM 交叉构建项目运行 scala sbt-native-packager

如何为 sbt-native-package 指定 RPM_BUILD_ROOT

SBT 如何为特定的 groupid 禁用 Ivy 缓存

如何为 sbt native packager 的 DockerPlugin 设置基础镜像?

如何为 sbt 设置堆大小?