我有externl项目的项目,在我的构建文件中使用RootProject类注册。
一般来说,我在同一级别上有4个文件夹:app0
,app1
,app3
和app-all
。
project
中有app-all
个文件夹,其中包含以下Build.scala文件:
import sbt._
object AppBuild extends Build {
lazy val app2 = RootProject(file("../app0"))
lazy val app3 = RootProject(file("../app3"))
lazy val app1 = RootProject(file("../app1"))
lazy val all = Seq(japp1, app2, app3)
lazy val root = project.in(file(".")).dependsOn(all.map(ClasspathDependency(_, None)) :_*)
// lazy val root = project.in(file(".")).aggregate(all.map(sbt.Project.projectToRef) :_*)
}
问题是,sbt正在以随机顺序构建这3个子项目。
一旦它从app1开始,另一次它以app3开始。对于aggregate和dependsOn调用都是相同的。什么是聚合规则?
我能以某种方式设定订单吗?
我希望设置类似app1.dependsOn(app3)
的smth,但实际上我不能这样做,因为它是"项目参考"但不是真正的项目。
版本0.13。
- 注意:这是带有一个文件的测试样本,您可以自己创建4个文件夹,尝试从应用程序构建所有内容,并查看发生的情况。
答案 0 :(得分:0)
在最新的sbt 0.13中,它就是这样做的。
lazy val `root` = (project in file(".")).
aggregate(`sub-a`, `sub-b`)
lazy val `sub-a` = (project in file("a"))
lazy val `sub-b` = (project in file("b")).
dependsOn(`sub-a`)
根据文件,http://www.scala-sbt.org/0.13/docs/Multi-Project.html#Classpath+dependencies
这也会在编译项目时创建项目之间的顺序