Scala 在sbt构建上运行任务

Scala 在sbt构建上运行任务,scala,sbt,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" ! } 我可以很好地运行它,但我希望它在每次运行构建文件时都能运行,我

我刚刚开始使用
sbt
,不太清楚它是如何工作的,我在
build.sbt
文件中创建了一个任务

lazy val execScript = taskKey[Unit]("Execute the shell script")
execScript := {
"C:/Users/dsweeney/Documents/configuration-services/swagger/codegen/SwaggerActivate.bat" !
}
我可以很好地运行它,但我希望它在每次运行构建文件时都能运行,我该怎么做呢

我一直在尝试将其添加到
.aggreate
方法中

lazy val root = Project(
 id = "configsvcs",
 base = file(".")
).dependsOn(data_model)
.aggregate(data_model, slickMigration, execScript )
但这似乎不是工作错误,因为方法聚合的参数太多


谢谢

您似乎希望在构建过程中生成源文件。实现这一目标的正确方法是:

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
目录中