我经常想在运行其中一项标准任务之前进行一些自定义。我意识到我可以创建新任务,按照我想要的顺序执行现有任务,但我发现这很麻烦,而且开发人员错过他应该运行 my-compile 而不是编译的机会很大,并导致难以修复错误。
所以我想定义一个自定义任务(比如说准备应用程序)并将其注入到现有任务的依赖树中(比如包装箱)这样每次有人调用包装箱我的自定义任务就在它之前运行。
我尝试这样做
def mySettings = {
inConfig(Compile)(Seq(prepareAppTask <<= packageBin in Compile map { (pkg: File) =>
// fiddle with the /target folder before package-bin makes it into a jar
})) ++
Seq(name := "my project", version := "1.0")
}
lazy val prepareAppTask = TaskKey[Unit]("prepare-app")
但它不会自动执行包装箱就在将编译输出打包到 jar 之前。那么如何更改上面的代码以在正确的时间运行呢?
更一般地说,我在哪里可以找到有关挂钩其他任务(例如编译)的信息,是否有一种通用方法可以确保您自己的任务在调用标准任务之前和之后运行?
扩展现有任务记录在 SBT 文档中Tasks http://www.scala-sbt.org/release/docs/Tasks.html(查看部分修改现有任务 http://www.scala-sbt.org/release/docs/Tasks.html#Modifying+an+Existing+Task).
像这样的事情:
compile in Compile <<= (compile in Compile) map { _ =>
// what you want to happen after compile goes here
}
实际上,还有另一种方法 - 定义你的任务依赖于编译
prepareAppTask := (whatever you want to do) dependsOn compile
然后修改 packageBin 以依赖于此:
packageBin <<= packageBin dependsOn prepareAppTask
(以上所有内容均未经测试,但我希望总体主旨应该有效)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)