【问题标题】:Multi-component versioning/building best practices多组件版本控制/构建最佳实践
【发布时间】:2013-03-25 16:40:43
【问题描述】:

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

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

  • my-main-project 依赖于:
    • my-component-1
    • my-component-2

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

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

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

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

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

【问题讨论】:

标签: java maven versioning


【解决方案1】:

一般注意事项

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

如果您发现它们之间存在某种关系,请考虑使用 ma​​ven 多模块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 的人通常如何处理这种多组件版本控制的情况?

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

【讨论】:

    【解决方案2】:

    Maven 发布插件

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 2010-09-24
      • 2012-03-22
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多