【问题标题】:RootProject and ProjectRefRootProject 和 ProjectRef
【发布时间】:2013-10-28 11:31:59
【问题描述】:

我一直在尝试查找有关 RootProject 和 ProjectRef 的更多信息,但看起来 sbt 文档中根本没有提到它。

我了解,如果您引用的是根项目,则在引用子项目时应该使用 RootProject 和 ProjectRef。但是,尚不清楚它们之间的行为将有何不同。有人可以帮忙解释一下吗?

还有它没有记录的事实,是否意味着 RootProject 和 ProjectRef 不是引用其他 sbt 项目的推荐方式?

谢谢。

【问题讨论】:

  • 你能举个例子来说明你正在尝试做什么吗?也就是说,你为什么要引用另一个项目,引用的是什么类型的项目? (想要这样做也不错——只是寻找上下文。)
  • 当然,马克。我有一个项目,其中包含我所有的 DAO 类并处理数据库操作。这个 DAO 项目需要对 Domain Project 中所有域类的引用。同时,我也有一个服务项目,引用了两者。
  • 那么,你想让DAO项目依赖Domain Project吗?如scala-sbt.org/release/docs/Getting-Started/… ?
  • 是的,这就是定义依赖的方式。那里的示例具有项目结构 hello、hello/foo 和 hello/bar。所示的 Build.scala 在 hello 中,因此它可以使用 Project(...) 引用 hello/foo 和 hello/bar。但是,对于依赖于 hello/bar 的 hello/foo 中的 Build.scala,则不能使用 Project(file("../bar")...),因为 sbt 会抛出错误。引用它的唯一方法是使用 RootProject(file("../bar")...) 或 ProjectRef(file("../bar")...) 之后,当然它只是一个简单的dependsOn(bar) 语句。使用哪个(ProjectRef,RootProject)?
  • 你能用这些额外的细节更新问题吗?它可以帮助未来的读者。谢谢!

标签: sbt


【解决方案1】:

单个 sbt 构建有一个 project/ 目录,用于 .scala 构建定义和插件定义。该构建中可以有多个子项目,它们有自己的 .sbt 文件,但不能有自己的 project/*.scala 文件。

当您想直接包含其他单独的构建而不是使用它们发布的二进制文件时,您可以使用“源依赖项”。这就是 RootProjectProjectRef 声明的内容。 ProjectRef 是最通用的:您指定构建的位置(URI)和构建中您想要依赖的项目的 ID(字符串)。 RootProject 是一种便利,它可以在您指定的 URI 处为构建选择根项目。

源依赖确实有开销:启动时间、内存使用和命令行可用性。如果项目组不需要分开,最好使用带有标准子项目的单个构建。

【讨论】:

  • 马克,你能详细解释一下为什么源依赖有更多的开销吗?我很好奇我们可以期望他们增加多少开销。命令行可用性会出现哪些类型的问题?
  • 好吧,在源依赖的情况下,SBT 必须针对源项目的构建递归运行,而不是拉入 JAR。
猜你喜欢
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
  • 2013-11-18
  • 2017-05-12
  • 2017-06-30
  • 2016-11-22
  • 2018-08-21
  • 2014-04-06
相关资源
最近更新 更多