【问题标题】:In SBT, how to reference a subproject of another project?在 SBT 中,如何引用另一个项目的子项目?
【发布时间】:2017-12-27 20:00:09
【问题描述】:

在 SBT 中可以depend directly on another project。这样做的好处是,在运行 ~compile 时,对依赖项的更改会导致重建。

现在我想依赖另一个项目的子项目,而不依赖于它的任何兄弟。所以,例如,我有:

a/
    build.sbt
    b/
        build.sbt
    c/
        build.sbt

d/
    build.sbt

我希望d 依赖于b,但依赖于c

我试过了,d/build.sbt

lazy val d = ProjectRef(file("../a"), "b")

lazy val root = project.dependsOn(d)

但这给了

Note: Unresolved dependencies path:
    com.foo:a_2.10:1.0
      +- root:root_2.10:1.0

当然可以

lazy val d = RootProject(file("../a/b"))

除了a/build.sbt 可能包含a/b 的其他设置,这些设置不会以这种方式获取。我需要一个可以引用a/build.sbt 的参考,但也需要专门参考a/b

有没有办法做这种参考?

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    这只是我的一个愚蠢的错误。

    lazy val root = project
    

    不正确。该行代码在名为root/ 的目录中创建了一个子项目。 The correct way to refer to the root project 是:

    lazy val root = Project(id = "root", base = file("."))
    

    之后,

    lazy val d = ProjectRef(file("../a"), "b")
    
    lazy val root = Project(id = "root", base = file(".")).dependsOn(d)
    

    按应有的方式工作。

    【讨论】:

    • 不幸的是,这对我不起作用。我在Dependencies.scala 下的project 下有一个Dependencies 对象,一旦我使用ProjectRef,sbt 就再也找不到其中定义的内容了。
    • @rabejens 很有趣,听起来你的dependsOnbuild.sbt 中可能会覆盖它?也许您可以将 Dependencies.scala 中的依赖项定义为可以从 build.sbt 引用的变量,这样您就可以将这两个集合添加到一个地方?
    猜你喜欢
    • 2012-07-24
    • 2011-01-19
    • 1970-01-01
    • 2020-05-15
    • 2011-07-31
    • 1970-01-01
    • 2017-02-28
    • 2012-09-08
    • 1970-01-01
    相关资源
    最近更新 更多