【发布时间】:2016-11-28 23:33:00
【问题描述】:
我有一个带有 externl 项目的项目,在我的构建文件中注册了 RootProject 类。
一般来说,我有 4 个文件夹:app0、app1、app3 和 app-all 在同一级别。
在app-all 中有project 文件夹,下面是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 开始。聚合和dependsOn 调用相同。什么是聚合规则?
我可以以某种方式设置订单吗?
我希望设置像app1.dependsOn(app3) 这样的东西,但实际上我做不到,因为它是“项目参考”而不是真正的项目。
Sbt 版本 0.13。
-- 注意:这是一个文件的测试示例,您可以自己创建 4 个文件夹,尝试从 apps-all 构建所有内容,看看会发生什么。
【问题讨论】:
-
出于好奇是的依赖关系是什么? sbt 的优点之一是可以并行构建独立项目。
-
基本上是我们的内部项目明确地相互依赖。存在编译依赖。如果不发布
app3,我无法编译app1。 -
构建定义看起来像0.13之前的风格,所以我不能确定语法,但如果顺序很重要,子项目之间应该有dependsOn关系。
-
@checat 显然你还没有完全阅读帖子。
-
@rumoku 好的,我错过了你尝试过的dependOn。但实际上,当前文档提供了一个看起来有点不同的示例,但它确实有效。我不认为
RootProject在构建中的用途不止一次,而且我认为 sbt 不能构建多个“根”项目,但我可能错了。