java多组件版本控制/构建最佳实践
我有一个用Maven构建的Java项目,它聚合了几个组件,每个组件都在自己的Maven项目中。这些组件中的任何一个都可能单独演化
我的项目结构可以描述如下:
- 我的主要项目取决于:
- my-component-1
- my-component-2
- 等等
现在,所有的pom。xml使用的是“快照”版本,因此,它们都使用我的存储库中可用的“最新”版本
但一旦我向我的客户发送了一个发布版本,我就应该冻结这些版本,并在源代码管理中做一个标记(或等效标记),以便在维护时恢复以前的状态
所以,我的问题是:我应该改变所有的pom吗。xml文件,为组件提供版本号,并将所有内容与此依赖关系版本联系起来?此外,如果我有很多组件(我的项目currenty有30多个小组件),我会在每次发布之前重新编号/恢复每个组件吗?当一个组件进化时(由于bug修复或增强),我必须增加它的版本,这样更改就不会影响已有的版本,对吗
使用maven的人通常如何处理这种多组件版本控制的情况
当然,我可以依靠我的版本控制标记来恢复到以前的时间点,并在每个版本上标记每个组件,但我不喜欢这种方法,因为依赖性版本控制(使用maven)让我对打包的内容以及(断开的)兼容性关系等有了更多的控制和可见性
# 1 楼答案
一般考虑
你可以考虑你的组件之间的一些关系。 他们真的独立吗(一对一)?还是有某种关系。。。一些公地的生命周期如果找到它们之间的某种关系,请考虑使用<强> Maven多模块<强>:http://www.sonatype.com/books/mvnex-book/reference/multimodule.html。简而言之,您将拥有一个具有一个版本的父级和一些模块(一些jar..以类似Spring及其子模块的方式)。这将帮助您减少版本管理
可以考虑使用<强> maven-release-plugin。它将帮助您自动标记、构建和部署您的模块,从而更轻松地处理版本管理以及与SCM和存储库的链接。 此外,结合多模块,它将极大地帮助你
有很多关于堆栈溢出的话题
我不知道你是否已经知道了。如果你愿意,我可以进一步解释,但如果你不想,你可能有足够的元素可以自己搜索
直截了当的回答
是的,你应该。在应用程序生命周期管理中,跟踪更改非常重要。所以,正如你所想象的,正如你所指出的,你真的应该构建并标记你的每个组件。这可能会很痛苦,但maven realease插件和多模块(即使有一个持续集成平台)可能会更容易
原因完全相同:是的
是的,你也应该。假设你选择了一个常见的版本,比如MAJOR。少数的更正,第一个数字表示相容性中断。小版本会带来一些休息,但不应该。修正永远不会影响兼容性
我不能一一回复,但我之前对发布插件和多模块的评论被认为是最佳实践。如果你想更进一步,你可以想象使用更强大的SCM(Clearcase、Perforce等),但maven集成较少,没有“良好”的文档记录,社区提供的示例也少于SVN或Git