有没有办法让sbt只聚合特定的任务?

时间:2015-12-11 00:34:33

标签: sbt

我的构建包括根项目,子项目和其他元项目。子项目产生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?
}

0 个答案:

没有答案