在多模块 Maven 项目中更新模块版本的最佳策略是什么

What is the best stategy to update modules version in multi-module Maven project

给定:多模块 Maven 项目

任务:每次发布后更新版本

我看到两种不同的策略:

策略 1 - 整个更新:更新所有模块的版本,不管是否有更新

策略 2 - 简约更新:仅更新实际受影响的那些模块的版本

假设我们有以下项目结构:

root
---dao
---domain
---web
   ---site1
   ---site2
---processors
    ---processor1
        ---processor1Service
        ---processor1Util
        ---processor1Tests
    ---processor2
        ---processor2Service
        ---processor2Util
        ---processor2Tests
---simulators
    ---simulator1
        ---simulator1Service
        ---simulator1Util
        ---simulator1Tests
    ---simulator2
        ---simulator2Service
        ---simulator2Util
        ---simulator2Tests
---etc

所有父 pom 都有包装类型 - pom.所有最终模块都有资源生产类型——jar、war、sar 等。 根 pom 包含 dependencyManagement 部分,其中列出了所有子模块。


策略 1:

策略 2:


策略1:

好处:

  1. 没有人手动输入(可能除了版本号)
  2. pom 配置简单且统一,只能使用 dependencyManagement 部分在根 pom 上处理
  3. 所有模块的单一版本因此没有zoo of 模块版本
  4. 无需依赖必须检查位置的外部工具 实际更新(或更糟 - 取决于 RM 注意力)
  5. 开发人员不受限制进行任何与以下内容无关的更改 他们的模块(f.e。如果你添加新行或 不小心 运行 IDE)
  6. 中的自动格式化工具

缺点:

  1. 将更新实际上没有的模块版本 受影响 - 因此 HDD 可能存在问题 space

策略二:

好处:

  1. 将是实际更新的模块的更新版本

缺点:

  1. zoo 版本。 dao_1.2 取决于 domain_1.52,两者都取决于 etc_1.639模块
  2. 手动输入
  3. 依赖必须检查实际更新的外部工具

请分享您的意见。在大型项目中如何处理这个问题,例如弹簧框架

就我个人而言,我将绝对支持您的策略 1。这是我工作的公司使用的策略。与 "versions zoo".

相比,您提到的 HDD space 或升级不需要升级的模块版本的副作用是小问题

只有在你使用OSGI架构的情况下我才会投票给你的策略2,这需要非常精确的模块版本控制策略,如果你一次升级所有版本,它会破坏OSGI的大好处(仅热部署需要更新的 modules/submodules。

我还建议你看看 http://java.dzone.com/articles/why-i-never-use-maven-release,它给出了如何在多模块 maven 项目中升级版本以及如何在任何 CVS 中进行跟踪的很好提示