是否存在虚拟/逻辑项目聚合的概念?

时间:2014-08-02 02:07:35

标签: sbt

是否可以在sbt中创建一个没有关联文件夹的子项目?

我有几个子项目,我想以不同的方式聚合它们,而不是为我动态创建空文件夹。

例如,如果我有以下构建定义:

lazy val a, b, c, d = project

对于子项目ad,我想制作一个“虚拟汇总”abd,汇总ab和{{ 1}},另一个名为d acdac,显然默认的根项目会聚合所有这些项目。

我现在可以这样做:

d

问题是sbt为每个项目创建了一个文件夹,即使对于虚拟聚合也是如此,这使得它成为一个不太吸引人的选项。

有没有办法设置sbt,以便val a = project val b = project val c = project val d = project val abd = project.aggregate(a, b, d) val acd = project.aggregate(a, c, d) // root implicitly aggregates all of them abd仅用于组织目的?

2 个答案:

答案 0 :(得分:0)

我不确定是否有可能拥有虚拟项目,但我确信这不是你真正想要的。

Aggregation means that running a task on the aggregate project will also run it on the aggregated projects所以我只能怀疑你想拥有这样的虚拟项目来跨项目执行任务。

如果是这样,你需要ScopeFilter的一些帮助来创建类似于聚合的项目范围,在聚合中你可以读取任务的值( aka 任务执行)或设置( aka 设置分配)。

<强> build.sbt

lazy val a, b, c, d = project

val abd = ScopeFilter(inProjects(a, b, d), inConfigurations(Compile))

val acd = ScopeFilter(inProjects(a, c, d), inConfigurations(Compile))

ScopeFilter在Getting values from multiple scopes中的sbt官方文档中有描述。

如果没有太多细节,很难给你一些帮助。

答案 1 :(得分:0)

我们在activator / sbt-server中做的一件事(主要用于手动交叉版本化语义)是将源目录添加到一起。

您可以在此处查看示例:https://github.com/sbt/sbt-remote-control/blob/master/project/build.scala#L34

但是,如果您正在寻找编译分离,您可能希望在事后使用sbt-assembly之类的东西将项目聚合到一个“超级jar”中,并且让下游依赖项使用这个“胖” “依赖。