是否可以在sbt中创建一个没有关联文件夹的子项目?
我有几个子项目,我想以不同的方式聚合它们,而不是为我动态创建空文件夹。
例如,如果我有以下构建定义:
lazy val a, b, c, d = project
对于子项目a
到d
,我想制作一个“虚拟汇总”abd
,汇总a
,b
和{{ 1}},另一个名为d
acd
,a
和c
,显然默认的根项目会聚合所有这些项目。
我现在可以这样做:
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
仅用于组织目的?
答案 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”中,并且让下游依赖项使用这个“胖” “依赖。