我正在尝试为大型多模块sbt项目提供满足以下要求的结构:
构建根项目时,依赖性首先从根目录下可用的模块解析(即,如果模块A依赖于模块B版本2,这是可用的B版本在根目录下,用B生成的任何构建来满足依赖性
单独构建模块时,将从存储库(本地,缓存,远程)解析依赖关系
我知道有两种工具可以定义对sbt项目的依赖:dependsOn()和libraryDependencies设置键。
到目前为止,在我的天真结构中,在根目录中跟踪模块(A,B)的所有构建信息,我只是在项目引用上传递.depends,并且在构建中正确解析了模块间依赖关系R
我想做的是在模块本身的build.sbt文件中移动/跟踪这种关系,然后将它们托管在不同的存储库中(偶尔将其拉回到父项目的“聚合”标签中)通过git submodule回购)
我用maven做这件事从来没有任何问题(我假设因为能够在模块的pom中明确地引用父,并且只有一种方法来建立依赖)但我还是无法包装我的围绕如何在sbt
中实现目标所以我的问题是,我是否必须为此编写自定义解析器?我有什么明显的遗失吗?
感谢。
答案 0 :(得分:1)
我也有类似的设置,包含100多个子项目的聚合项目。子项目也存在于自己的存储库中,可以独立构建/发布,也可以作为集合项目的一部分。我不需要任何特殊的解析器就可以工作。
我只是将你描述的两种方法结合起来:
groupId := "groupId"
version := "1.0.0-SNAPSHOT"
libraryDependencies += "groupId" %% "B" % version
groupId := "groupId"
version := "1.0.0-SNAPSHOT"
lazy val a = (project in file(a)).dependsOn(b)
lazy val b = (project in file(b))
我注意到sbt非常聪明,不会将依赖性包含在b上两次。