我一直在寻找这是否可行一段时间但收效甚微。
使用 SBT,您能否以编程方式创建子项目,而无需明确地将每个项目分配给它自己的val
?
我当前的项目结构如下所示:
root/
common/ <--- This is another sub-project that others dependOn
project/
build.scala
src/main/scala
apps/ <--- sub-projects live here
Sub1/
Sub2/
Sub1
并且Sub2
都是他们自己的 SBT 项目。
我第一次尝试将这些项目链接在一起是这样的:
// root/project/build.scala
import sbt._
import Keys._
object build extends Build {
lazy val common = project /* Pseudo-code */
val names = List("Sub1", "Sub2")
lazy val deps = names map { name =>
Project(id = name, base = file(s"apps/$name")).dependsOn(common)
}
lazy val finalDeps = common :: deps
lazy val root = project.in(file(".")).aggregate(finalDeps.map(sbt.Project.projectToRef) :_*)
.dependsOn(finalDeps.map(ClassPathDependency(_, None)) :_*)
}
但是,因为 SBT 使用反射来构建它的项目和子项目,所以这不起作用。
仅当每个子项目都明确说明时才有效:
lazy val Sub1 = project.in(file("apps/Sub1"))
所以问题:
有没有办法在 SBT 中以编程方式构建子项目依赖项?