如何使用自定义依赖项扩展现有的sbt任务?

时间:2015-06-26 06:38:40

标签: scala sbt

如何更改依赖于新任务的现有核心任务?

E.g。我有一个新的任务创建一些文件夹,我想在编译中编译'依赖于此的任务,以便依赖于编译的所有任务(如test / package / run / etc)也创建这些文件夹。

在编译中重新定义'编译'

compile in Compile := {
  createRepositoryFolder.value
  (compile in Compile).value
}

导致循环引用错误。使用

compile <<= (compile in Compile) dependsOn createRepositoryFolders

似乎有效,但它似乎创造了一个新的编译&#39;任务不是由依赖于编译的任务运行的; &#39; createRepositoryFolders&#39;运行&#39;测试时不执行任务。或者&#39;运行&#39;任务。

使用&#39;检查编译&#39;确实显示了对&#39; createRepositoryFolders&#39;的依赖。任务,但&#39;检查测试&#39;确实显示了对编译&#39;的依赖性。任务,但不是在'createRepositoryFolders&#39;任务。

1 个答案:

答案 0 :(得分:0)

我相信使用:=运算符,您可以为任务compile in Compile分配新值。

由于您在compile in Compile的定义中引用了compile in Compile,这就是您有循环依赖的原因。

您可能想要的是附加到任务而不是重新定义任务。有许多运算符可以将值附加到任务,例如+ =,&lt; + =,具体取决于您要分配的值的类型。

但是,由于您正在创建资源,因此您可能希望将任务添加到resourceManaged任务,而不是直接编译。

假设任务createRepositoryFolder返回Seq [File],您可以将以下内容添加到projectSettings:

(resourceManged in Compile) += createRepositoryFolder.taskValue

sbt docs

中有更多信息
相关问题