SBT有条件地运行资源生成器



我有一个项目,我需要使用第三方cli从资源到资源生成我的ui。为了达到这个目的,我做了以下操作:

Compile / resourceGenerators += {
// do my stuff here
}.taskValue

这工作得很好,但由于它是一个长时间运行的任务,我只希望在我特别说明的情况下执行它(例如,通过带参数的命令)。因此,我试图创建这样一个与不同的编译命令调用运行设置。我读了很多关于sbt/设置/任务/命令等,但我有点迷路了。

编辑:正如Luis Miguel Mejía Suárez所评论的那样,有一种方法可以缓存文件,并且只在所述文件发生更改时才运行任务。不幸的是,这并不能解决我的问题,因为我可能对各自的文件进行了更改,但仍然不想构建它们。这是因为我有一个正在运行的开发服务器,当我更改ui时,它会重新加载ui。因此,在开发时,我不需要为ui执行昂贵的构建任务,而只想重新编译scala类并重新启动应用程序。

我最终使用Def.TaskDyn和settingKey解决了我的(我承认,非常具体)问题。如果有人有类似的问题来这里:

lazy val buildUi = Def.settingKey[Boolean]("to build or not to build")
Compile / resourceGenerators += Def.taskDyn {
if (buildUi.value) {
// build here and return the files
} else {
Def.task[Seq[File]]{Seq.empty}
}
}

为了方便使用,我还添加了命令别名:

addCommandAlias("buildUiOff", "set buildUi := false")
addCommandAlias("buildUiOn", "set buildUi := true")

编辑:项目定义:

lazy val root = (project in file("."))
.settings(
name := "ProjectName",
// default behaviour: building on
buildUi := true,
...

和在SBT shell中不构建运行

>buildUiOff
>run

相关内容

  • 没有找到相关文章

最新更新