Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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 在多模块Maven项目中,更新模块版本的最佳策略是什么_Java_Maven_Version_Multi Module - Fatal编程技术网

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

Java 在多模块Maven项目中,更新模块版本的最佳策略是什么,java,maven,version,multi-module,Java,Maven,Version,Multi Module,给定:多模块Maven项目 任务:每次发布后更新版本 我看到两种不同的策略: 策略1在整个更新过程中:更新所有模块的版本,不管是否有更新 策略2最低限度更新:仅更新实际受影响模块的版本 假设我们有以下项目结构: root ---dao ---domain ---web ---site1 ---site2 ---processors ---processor1 ---processor1Service ---processor1Util

给定:多模块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:

  • release manager RM(或任何人)从“功能”合并更新 分行(s)
  • 所有持续集成工作都在进行(让它们正常运行)
  • RM在根目录上调用mvn release:versionUpdate-DsetVersion=1.2
  • 完成
战略2:

  • RM合并来自“功能”分支的更新

  • 所有持续集成工作都在进行(让它们正常运行)

  • RM使用subversion工具(git、svn等)检查实际受影响的模块
  • RM手动增加受影响模块的版本
  • 完成

策略1:

好处:

  • 没有人工输入(可能除了版本号)
  • pom配置非常简单且统一,只能使用DependencyManager部分在根pom上处理
  • 所有模块的单一版本,因此没有 模块版本
  • 无需依赖必须检查位置的外部工具 实际更新(甚至更糟-取决于RM的关注度)
  • 开发人员不受限制进行任何与 他们的模块(f.e.如果您添加新线或 意外运行IDE中的自动格式化工具)
  • 缺点:

  • 将更新实际未更新的模块版本 受影响-因此硬盘空间可能出现问题
  • 策略2:

    好处:

  • 将是实际更新的模块的更新版本
  • 缺点:

  • 动物园版。dao_1.2依赖于域_1.52,两者都依赖于 etc_1.639模块
  • 人工输入
  • 依赖于必须检查实际更新的外部工具

  • 请分享你的意见。在诸如springframework之类的大型项目中如何处理这个问题我个人绝对支持您的策略1。这就是我工作的公司所采用的策略。与“版本动物园”相比,您提到的HDD空间或升级不需要升级的模块版本的副作用是次要问题

    如果您使用OSGI架构,并且这需要非常精确的模块版本化策略,并且如果您一次升级所有版本,这将破坏OSGI的巨大优势(仅热部署需要更新的模块/子模块),那么我将投票支持您的策略2


    我还建议您查看一下,哪一个提供了关于如何在多模块maven项目中升级版本的好提示,以及如何在任何CVS中跟踪的好提示谢谢您的回答。为了便于统计,您能告诉我您的项目中大约有多少个模块吗。您是否尝试使用策略2并对此感到失望,或者您一直在使用#1?在工作中,我们使用的是OSGI Arquit体系结构,因此每个jar/模块都会公开自己的版本,因为OSGI的特性。因此,每当升级/修复OCURR时,只需要一个可部署的jar/模块来更新而不是所有项目。但是在以前的J2EE环境中,我们一次升级了所有可部署的/jar模块。您应该根据您的“可部署单元”选择策略。在OSGI中,可部署单元是一个jar,因此您应该为每个模块选择一个唯一的版本。在J2ee环境中,因为可部署单元是一个war,所以不介意一次升级所有依赖项