SBT插件——编译前执行自定义任务

Tim*_*igo 3 scala sbt sbt-plugin

我刚刚编写了我的第一个 SBT Autoplugin,它有一个生成设置文件的自定义任务(如果该文件尚不存在)。当任务被显式调用时,一切都按预期工作,但我希望在使用插件编译项目之前自动调用它(无需项目修改它的 build.sbt 文件)。有没有办法做到这一点,或者我是否需要以某种方式覆盖compile命令?如果是这样,有人可以指出我这样做的例子吗?任何帮助将不胜感激!(如果我遗漏了一些简单的东西,我很抱歉!)谢谢!

ste*_*ino 5

您可以定义任务之间的依赖关系,dependsOncompile in Compile通过重新分配作用域任务(如)来覆盖它的行为。

添加到build.sbt文件中的以下几行可以作为示例:

lazy val hello = taskKey[Unit]("says hello to everybody :)")

hello := { println("hello, world") }

(compile in Compile) := ((compile in Compile) dependsOn hello).value
Run Code Online (Sandbox Code Playgroud)

现在,每次运行时compilehello, world都会打印:

[IJ]sbt:foo> compile
hello, world
[success] Total time: 0 s, completed May 18, 2018 6:53:05 PM
Run Code Online (Sandbox Code Playgroud)

此示例已使用 SBT 1.1.5 和 Scala 2.12.6 进行测试。