如何处理功能分支中的内部maven依赖项

时间:2018-02-15 14:49:12

标签: git maven dependencies branch versioning

我们的产品由同一Git存储库中的不同模块组成。让我们说我们有"核心"它具有maven依赖关系" api"。

现在,当我们正在开发一个特定的功能/ bugfix分支时,我们正在运行它的构建,以便测试可以使用它。

来自所有分支的所有工件最终都在相同的Maven存储库中,具有相同的版本和分类器。这些模块不是一起构建的。所以" api"可能是在早上建造的,"核心"下午。

我们遇到的问题是,目前,如果介于两者之间,那么"核心"可能会得到" api"从另一个分支构建快照。

我认为这是使用与我们类似设置的团队的常见问题。

我很想说,处理这个问题的方法是使分支之间的Maven坐标唯一,或者使用特殊的分类器,或者直接使用版本中的特殊后缀。

我应该遵循哪种方法?

2 个答案:

答案 0 :(得分:1)

根据我的经验,这通常不是问题,因为项目通常不会在共享Maven仓库中放置功能分支的构建。

无论何时更新长期分支(并且对该分支的更新应该是一致的),您的构建服务器当然应该用于重建。听起来你正在使用gitflow;在这种情况下,每次更新master时都会进行生产构建,每次develop更新时都会构建一个开发构建。您的master版本将包含发布版本号,而您的develop版本将包含快照版本号。

从共享存储库中的功能分支进行构建有何用处?就此而言,它有什么用途让构建服务器完全涉及功能分支?您的开发人员可以在本地构建和部署以测试功能分支(包括必要时更新其本地maven存储库),并且一旦他们尝试推送合并以进行开发,这将触发CI构建并捕获他们错过的任何内容,对吧?

答案 1 :(得分:1)

如果您真的想要从不同的功能分支构建,请将其他术语放入版本号1.2.3-feature1-SNAPSHOT。这表明您确实构建了同一工件的不同版本,这也确保您永远不会在同一个项目中添加两个“相同”工件作为依赖项。

另见

https://stackoverflow.com/a/48784315/927493

Maven best practices for versioning different branches [development, qa / pre-release]