dependencies - 版本控制中多模块源项目的声明性依赖处理

标签 dependencies ivy dependency-management gradle refix

我们有许多由大量模块组成的产品,其中一些模块在一些产品之间共享。它们分布在几个版本控制存储库中。

产品由负责检查所有模块并以正确顺序构建它们的主 Ant 脚本构建。这些模块没有自己的发布周期。

现在,我非常想进行声明式依赖管理,但似乎所有解决方案(Maven、Ivy)都依赖于工件而不是版本控制下的源代码。依赖工件会给我们带来麻烦,所以我宁愿不这样做。我想要像 Ivy 这样的东西,但是我可以说我的产品依赖于模块 foo、bar 和 baz(分支 2.0),它会从一个或多个源代码管理器(在某些配置中指定)检查源代码到平坦的工作空间。

我计划使用 gradle 进行构建,因此非常感谢一个适合的解决方案......

最佳答案

Gradle 嵌入了 ivy 项目以进行依赖管理,因此您将面临同样的问题。

依赖管理是一种机制,它可以将大型单体构建分解为较小的组件构建,每个构建都将其输出发布到公共(public)存储库中以供其他依赖模块使用。

因此,这意味着您必须首先做出明智的决定来分解您的大型构建,或者只是满足于使用依赖管理来控制 3rd 方开源库。

假设您无法控制拥有多个 SCM 存储库的事实,我可以推荐以下方法来创建集中式构建(我假设您使用的是 ANT + subversion):

1)
创建一个包含您的子模块的主项目

2) 每个子模块作为external 添加到主项目中定义。这使得 master 的一个 checkout 可以反过来自动 checkout 每个子项目

3) 构建.xml 主项目包含一个使用 ivy buildlist 的构建文件根据各个子项目中声明的依赖关系以正确的顺序构建子项目的任务 Ivy .xml 文件。

多项目构建的示例是 here

关于dependencies - 版本控制中多模块源项目的声明性依赖处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3084596/

相关文章:

linux - 冒号(:) and dash (-) in an Ubuntu dpkg version number mean?

SBT 支持自定义 Ivy 模块状态吗?

c# - 解决 NuGet 版本冲突

grails - 解析 Grails 插件的快照版本(使用 maven-publisher 插件部署)

java - 如何将 gradle 配置为仅对某些依赖组使用本地存储库?

gradle - 如何从Gradle中的所有依赖项中忽略特定的传递性依赖项

java - 是否可以在 Netbeans 的项目 View 中显示一个类是公共(public)类还是包私有(private)类?

c++ - 滥用 soversion minor revision 来支持可选的依赖

javascript - 可使用(或不带)_references.ts 自动解析和排序 TypeScript 依赖项的工具?

java - 具有依赖项的 Keycloak 扩展