Dependencies 版本控制中多模块源项目的声明性依赖关系处理

Dependencies 版本控制中多模块源项目的声明性依赖关系处理,dependencies,ivy,dependency-management,gradle,refix,Dependencies,Ivy,Dependency Management,Gradle,Refix,我们有许多产品,它们由大量模块组成,其中一些模块在一些产品之间共享。它们分布在几个版本控制存储库中 产品由主Ant脚本构建,主Ant脚本负责检出所有模块并按正确顺序构建它们。这些模块没有自己的发布周期 现在,我非常想讨论声明性依赖关系管理,但似乎所有解决方案(Maven、Ivy)都依赖于工件,而不是版本控制下的源代码。依靠人工制品会让事情变得更糟,所以我不想这样。我想要像Ivy这样的东西,但是我可以说我的产品依赖于foo、bar和baz模块(branch 2.0),它会将源代码从一个或多个源代码

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

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

现在,我非常想讨论声明性依赖关系管理,但似乎所有解决方案(Maven、Ivy)都依赖于工件,而不是版本控制下的源代码。依靠人工制品会让事情变得更糟,所以我不想这样。我想要像Ivy这样的东西,但是我可以说我的产品依赖于foo、bar和baz模块(branch 2.0),它会将源代码从一个或多个源代码管理器(在某些配置中指定)签出到一个平面工作区


我计划使用gradle进行构建,因此,如果能找到一个与之相适应的解决方案,我将不胜感激……

gradle将常春藤项目嵌入到它的依赖关系管理中,因此您将面临同样的问题

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

因此,这意味着您必须首先做出一个明确的决定,分解您的大型构建,或者简单地满足于使用依赖关系管理来控制第三方开源库

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

(一) 创建包含子模块的主项目

2) 每个子模块都作为定义添加到主项目中。这使主项目的一次签出能够依次自动签出每个子项目

3) build.xml主项目包含一个生成文件,该文件使用ivy任务根据各个子项目ivy.xml文件中声明的依赖项,以正确的顺序构建子项目


多项目构建的一个示例是

我认为Refix是您所追求的:

一旦所有内容都签出,我需要(我认为)Gradle的“项目依赖项”以正确的顺序构建模块并引用构建的JAR。svn:外部可能会起作用,但我不太喜欢在多个地方指定依赖项。此外,它是静态的,不允许签出时间魔法,如“获取与另一个模块相同的命名分支,如果它存在,否则获取主干”。在我做出决定之前,我正在接受更多的建议……:)Mult项目以同样的方式在Gradle中构建