gpt4 book ai didi

scala - Sbt 多模块构建 - 维护模块 dep 图作为模块中的 libraryDependencies

转载 作者:行者123 更新时间:2023-12-02 03:00:31 26 4
gpt4 key购买 nike

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

  1. 构建根项目时,首先从根下可用的模块解析依赖项(即,如果模块 A 依赖于模块 B 版本 2,即 B 可用的版本在根目录下,用 B 的构建生成的任何内容来满足依赖关系 )

  2. 当单独构建模块时,从存储库(本地、缓存、远程)解析依赖关系

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

到目前为止,在我的原始结构中,模块(A、B)的所有构建信息都在根目录下进行跟踪,我只是简单地传递了 .dependsOn 项目引用,并且在构建中正确解析了模块间的依赖关系的 R

current build

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

desired build

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

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

谢谢。

最佳答案

我也有类似的设置,有一个包含 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 的依赖。

关于scala - Sbt 多模块构建 - 维护模块 dep 图作为模块中的 libraryDependencies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46411166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com