Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多组件版本控制/构建最佳实践_Java_Maven_Versioning - Fatal编程技术网

Java 多组件版本控制/构建最佳实践

Java 多组件版本控制/构建最佳实践,java,maven,versioning,Java,Maven,Versioning,我有一个用Maven构建的Java项目,它聚合了几个组件,每个组件都在自己的Maven项目中。这些组件中的任何一个都可能单独演化 我的项目结构可以描述如下: 我的主要项目取决于: my-component-1 my-component-2 等等 现在,所有pom.xml都使用“快照”版本,因此,它们都使用我的存储库中可用的“最新”版本 但一旦我向我的客户发送了一个发布版本,我就应该冻结这些版本,并在我的源代码管理中做一个标记(或等效标记),以便在维护时恢复以前的状态 因此,我的问题是:我

我有一个用Maven构建的Java项目,它聚合了几个组件,每个组件都在自己的Maven项目中。这些组件中的任何一个都可能单独演化

我的项目结构可以描述如下:

  • 我的主要项目取决于:
    • my-component-1
    • my-component-2
    • 等等
现在,所有pom.xml都使用“快照”版本,因此,它们都使用我的存储库中可用的“最新”版本

但一旦我向我的客户发送了一个发布版本,我就应该冻结这些版本,并在我的源代码管理中做一个标记(或等效标记),以便在维护时恢复以前的状态

因此,我的问题是:我是否应该在每个版本之前更改所有pom.xml文件,为组件提供版本号,并将所有内容与此依赖关系版本绑定?另外,如果我有很多组件(我的项目currenty有30多个小组件),我会在每个版本之前重新编号/恢复每个组件吗?当单个组件发展时(由于bug修复或增强),我必须增加其版本,以便更改不会影响现有版本,对吗

使用maven的人通常如何处理这种多组件版本控制的情况

当然,我可以依靠我的版本控制标记来恢复到以前的时间点,并且只标记每个发行版上的每个组件,但我不喜欢这种方法,因为依赖版本控制(使用maven)让我能够更好地控制和了解打包的内容以及(断开的-)之间的关系兼容性和更多方面。

一般注意事项 你可以考虑你的组件之间的一些关系。 他们真的是独立的吗?还是有某种关系。。。一些公地的生命周期

如果找到它们之间的关系,请考虑使用<强> Maven多模块<强> >。简而言之,您将拥有一个具有一个版本的父级和一些模块(一些jar..以类似Spring及其子模块的方式)。这将帮助您减少版本管理

你可以考虑使用<强> <强>。它将帮助您自动标记、构建和部署模块,从而更轻松地处理版本管理以及与SCM和存储库的链接。 此外,结合多模块,它将大大帮助您

有很多关于堆栈溢出的主题

我不知道你是否已经知道了。如果你愿意,我可以进一步解释,但是如果你不想,你可能有足够的元素可以自己搜索

直截了当的回答 因此,我的问题是:我是否应该在每个版本之前更改所有pom.xml文件,为组件提供版本号,并将所有内容与此依赖关系版本绑定

是的,你应该。在应用程序生命周期管理中,跟踪更改非常重要。所以,正如您所想象的,正如您所指出的,您确实应该构建并标记每个组件。这可能会很痛苦,但maven realease插件和多模块(即使有一个持续集成平台)可能会更容易

在每次发布之前,我是否需要重新编号/恢复每个版本

原因完全相同:是的

我必须增加它的版本,这样更改就不会影响已有的版本,对吗

是的,你也应该。假设您选择一个常见的版本,如MAJOR.minor.correction,第一个数字表示兼容性中断。次要版本会带来一些中断,但不应该。修正永远不会影响兼容性

使用maven的人通常如何处理这种多组件版本控制的情况

我不能一一回复,但我之前对发布插件和多模块的评论被认为是最佳实践。如果您想更进一步,您可以想象使用更强大的SCM(Clearcase、Perforce,…),但是maven集成较少,没有“良好”的文档记录,社区提供的示例也比SVN或Git少。

maven发布插件
如果您使用的是多模块
pom.xml
,您应该能够并让它对所有依赖项进行“发布”构建,删除
-SNAPSHOT
版本并将其上载到存储库。这就是
发布版
插件及其工作流程的唯一目的

好奇的是,您是否已经查看了maven发布插件提供的开箱即用功能,发现它不适合您