【问题标题】:SBT is building external projects in random orderSBT 正在以随机顺序构建外部项目
【发布时间】:2016-11-28 23:33:00
【问题描述】:

我有一个带有 externl 项目的项目,在我的构建文件中注册了 RootProject 类。 一般来说,我有 4 个文件夹:app0app1app3app-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 不能构建多个“根”项目,但我可能错了。

标签: scala sbt


【解决方案1】:

在最新的 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

这也会在编译项目时创建项目之间的排序

【讨论】:

    猜你喜欢
    • 2013-12-20
    • 1970-01-01
    • 2018-07-08
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2013-11-09
    • 2014-03-19
    相关资源
    最近更新 更多