在sbt构建上运行任务

时间:2018-06-29 11:38:19

标签: scala sbt

我刚刚开始使用sbt,但不太清楚它的工作方式,我已经在build.sbt文件中创建了一个任务

lazy val execScript = taskKey[Unit]("Execute the shell script")
execScript := {
"C:/Users/dsweeney/Documents/configuration-services/swagger/codegen/SwaggerActivate.bat" !
}

我可以很好地运行它,但是我希望每次运行构建文件时都可以运行它,我该怎么做呢?

我一直试图将其添加到.aggerate方法中

lazy val root = Project(
 id = "configsvcs",
 base = file(".")
).dependsOn(data_model)
.aggregate(data_model, slickMigration, execScript )

但这似乎不是工作错误,因为方法聚合的参数过多。

谢谢

1 个答案:

答案 0 :(得分:1)

似乎您想在构建期间生成源文件。实现此目的的正确方法是:

sourceGenerators in Compile += execScript.taskValue

这将在编译项目之前每次运行任务。为此,您的任务必须返回其生成的文件列表:

lazy val execScript = taskKey[Seq[File]]("Execute the shell script")

execScript := {
   val outputDir := sourceManaged.in(Compile).value / "generated"

   // bad: absolute local path
   "C:/Users/dsweeney/Documents/configuration-services/swagger/codegen/SwaggerActivate.bat" !

   // return all Java files of the output directory
   outputDir ** "*.java" // or "*.scala"?
}

注意,优良作法是将文件生成到sourceManaged目录中。