我刚刚开始使用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 )
但这似乎不是工作错误,因为方法聚合的参数过多。
谢谢
答案 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
目录中。