【问题标题】:Sbt multi-module build - maintain module dep graph as libraryDependencies in modulesSbt 多模块构建 - 将模块深度图维护为模块中的 libraryDependencies
【发布时间】:2018-03-06 18:35:54
【问题描述】:

我正在尝试为一个满足以下要求的大型多模块 sbt 项目提出一个结构:

    1234563在根目录下,使用 B 生成的任何内容来满足依赖关系)
  1. 单独构建模块时,从存储库(本地、缓存、远程)解析依赖关系

我知道有两种工具可以定义对 sbt 项目的依赖关系:dependsOn() 和 libraryDependencies 设置键。

到目前为止,在我的幼稚结构中,模块(A,B)的所有构建信息都在根处跟踪,我只是传递了 .dependsOn 项目引用,并且在构建中正确解决了模块间依赖关系的R

我想做的是在模块本身的 build.sbt 文件中移动/跟踪这种关系,然后将它们托管在单独的存储库中(偶尔会拉回父项目的“聚合”标签通过 git 子模块回购)

我在使用 maven 时从来没有遇到过任何问题(我假设是因为能够在模块的 pom 中显式引用父级,并且只有一种方法可以建立依赖关系)但我还不能包装我的看看如何让它在 sbt 中运行

所以我的问题是,我必须为此编写一个自定义解析器吗?我在这里有什么明显的遗漏吗?

谢谢。

【问题讨论】:

    标签: scala module sbt multi-module


    【解决方案1】:

    我也有类似的设置,有一个包含 100 多个子项目的聚合项目。子项目也存在于他们自己的存储库中,可以独立构建/发布,也可以作为聚合项目的一部分。我不需要任何特殊的解析器来工作。

    我只是结合了你描述的两种方法:

    项目A:

    groupId := "groupId"
    version := "1.0.0-SNAPSHOT"
    libraryDependencies += "groupId" %% "B" % version
    

    项目 B:

    groupId := "groupId"
    version := "1.0.0-SNAPSHOT"
    

    项目R:

    lazy val a = (project in file(a)).dependsOn(b)
    lazy val b = (project in file(b))
    

    我注意到 sbt 足够聪明,不会两次包含对 b 的依赖。

    【讨论】:

    • 谢谢。父下b的版本不满足a中库依赖的版本要求怎么办?
    • @pgn 我不知道,我现在集中管理版本号以避免这个问题。我只能猜测 sbt 会像往常一样在多个具有不同版本的相同依赖项的情况下执行:选择最新版本。
    • 让我在一个小项目中验证这一点。我希望它尝试去缓存/本地/远程仓库
    猜你喜欢
    • 2021-12-02
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    相关资源
    最近更新 更多