我的构建包括根项目,子项目和其他元项目。子项目产生JAR,而元项目则用于包装等其他事项。
请参阅ThreadFactoryBuilder了解我这样做的原因。现在假设这是正确的事情,但如果没有,那么随意评论这个问题。
我想要做的是聚合所有子项目,如下所示:
lazy val root = (project in file(".")).
aggregate(subProjects: _*)
val subProjects = Seq(projectA, projectB)
lazy val projectA = project
lazy val projectB = project
对于包装,我有类似的东西:
lazy val packaging = (project in file("packaging").
enablePlugins(JavaServerAppPackaging). // Using sbt-native-packager
settings(
libraryDependencies ++= Seq(projectA.projectID, projectB.projectID)
)
现在在打包之前我必须发布子项目:
sbt> publishLocal
然后从我发布的那些已发表的工件中打包:
sbt> packaging/universal:packageBin
这一切都很好但现在对于真正的问题,我如何汇总特定任务?例如,我希望能够清理所有项目,包括包装。
我知道可以采取相反的做法,请参阅Cross platform build with SBT。
我已经对sbt.Aggregation有所了解,但我无法做出它的头或尾。
我理想的解决方案如下:
lazy val root = (project in file(".")).
aggregate(subProjects: _*).
settings(aggregatedTasks(metaTasks, metaProjects ): _*)
...
val metaProjects = Seq(packaging, someOtherProject)
val metaTasks = Seq(clean, someOtherTask)
def aggregatedTasks(tasks: Seq[TaskKey[_]], projects: Seq[Project]): Seq[Setting[_]] = {
??? // Is there a way to do this?
}