2

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

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

  • 我的主要项目取决于:
    • 我的组件 1
    • 我的组件 2
    • 等等

如今,所有 pom.xml 都使用“快照”版本,因此,它们都使用我存储库中可用的“最新”版本。

但是一旦我将发布版本发送给我的客户,我应该冻结这些版本并在我的源代码控制中创建一个 TAG(或等效项),这样我就可以在维护时恢复以前的状态。

所以,我的问题是:我是否应该在每次发布之前更改所有 pom.xml 文件,为组件提供版本号,并将所有内容与此依赖版本联系起来?另外,如果我有很多组件(我的项目当前有 30 多个小子组件),我是否必须在每次发布之前重新编号/还原每个组件?当单个组件演变时(由于错误修复或增强),我必须增加其版本以使更改不会影响预先存在的版本,对吗?

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

当然,我可以只依靠我的版本控制标签来恢复到以前的时间点,并在每个版本上标记每个组件,但我不喜欢这种方法,因为依赖版本控制(使用 maven)给出我对打包的内容以及(损坏的)兼容性等关系有更多的控制和可见性。

4

2 回答 2

0

一般注意事项

您可以考虑组件之间的一些关系。他们真的是独立的(彼此对立)吗?或者是否存在某种关系......一些公共生命周期?

如果您发现它们之间存在某种关系,请考虑使用maven 多模块: http: //www.sonatype.com/books/mvnex-book/reference/multimodule.html。简而言之,您将有一个父级,具有一个版本和一些模块(一些 jars .. 以 Spring 及其子模块的方式)。这将帮助您减少版本管理。

您可以考虑使用maven-release-plugin。它将帮助您自动标记、构建和部署您的模块,更轻松地处理版本控制以及与 SCM 和存储库的链接。此外,结合多模块,它会极大地帮助你!

Stack Overflow 上有很多关于这个的话题。

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

直截了当的答案

所以,我的问题是:我是否应该在每次发布之前更改所有 pom.xml 文件,为组件提供版本号,并将所有内容与此依赖版本联系起来?

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

我是否必须在每次发布之前重新编号/还原每个版本?

出于完全相同的原因:是的!

我必须增加它的版本,以便更改不会影响预先存在的版本,对吗?

是的,你也应该。假设您选择 MAJOR.minor.correction 等通用版本,第一个数字表示兼容性中断。次要版本会带来一些中断,但不应该。更正绝不会影响兼容性。

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

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

于 2013-04-03T20:47:23.600 回答
0

Maven 发布插件

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

于 2013-04-03T21:25:01.700 回答