Maven多模块及version修改的实现方法

 更新时间:2019年06月04日 14:27:25   作者:曹金桂  
这篇文章主要介绍了Maven多模块及version修改的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

对于使用maven构建的java项目,通常聚合多个子模块项目。在版本迭代的过程中经常变更版本号,更新parent版本号,发现子模块版本号没有更新,需要一个个的手动去更新,太麻烦,且容易出错。

在版本更新之后,内部模块之间的依赖也需要变更,往往存在遗漏。

MAVEN多个子模块项目

以上是一个基本的

主项目parent包

maven-multily-module/pom.xml

  • 指定整个应用的dependencyManagement
  • 定义项目的发布的仓库地址distributionManagement
  • 所有第三方依赖的版本号全部定义在properties下
  • 所有内部模块依赖版本号统一使用**${project.version}**
  • 指定所有的子模块modules

项目子模块pom.xml

app-api/pom.xml;app-dao/pom.xml;util/pom.xml;trade-core/pom.xlm;user-core/pom.xml

  • 明确定义parent模块的artifactId,groupId,version
  • 不要定义子模块的version(同parent保持一致)
  • 子模块无需定义groupId
  • 子模块所有的依赖包版本全部集成parent模块,即:子模块不得定义依赖包版本号
  • 子模块需定义是否需要deploy到私服<maven.deploy.skip>true</maven.deploy.skip>
  • 对于需要depoly的子模块【对外发布的,比如dubbo提供的api包】不应该依赖重量级jar包(比如:spring,mybatis等)

子模块packaging为pom

app-core/pom.xml

  • 指定所有的子模块modules
  • 无需定义groupId
  • 明确定义parent模块的artifactId,groupId,version

以上定义规则保证了项目内部模块之间的依赖版本统一,第三方依赖包版本不冲突

MAVEN聚合多个子模块项目版本号修改

虽然按照以上的规则定义模块及依赖,但是在版本迭代过程中需要修改对应的版本号,还是需要顶级pom的版本号,及每个子模块内部parent的版本号。

 <parent>
  <groupId>com.maven.multily.module</groupId>
  <artifactId>parent</artifactId>
  <!--版本升级需要修改每个子模块 parent.version的值-->
  <version>1.1.0-SNAPSHOT</version>
 </parent>

这种手工修改方式极容易遗漏,导致项目内部模块版本依赖存在问题。

我们可以通过maven的插件方式来升级整个项目的版本号。方案如下:

在项目顶层pom中添加version插件

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>versions-maven-plugin</artifactId>
  <version>2.3</version>
  <configuration>
   <generateBackupPoms>false</generateBackupPoms>
  </configuration>
 </plugin>

在项目根目录下执行以下命令修改版本号

// 设置新的版本号未1.2.0-SNAPSHOT
mvn versions:set -DnewVersion=1.2.0-SNAPSHOT

以上命令会将maven-multily-module/pom.xml版本修改为1.2.0-SNAPSHOT,且会修改所有子模块内 parent的version为1.2.0-SNAPSHOT。所以建议子模块不设置version,自动从parent继承version即可

相关参数说明

参数 默认值 说明
allowSnapshots false 是否更新-snapshot快照版
artifactId ${project.artifactId} 指定artifactId
generateBackupPoms true 是否备份pom文件
groupId ${project.groupId} 指定groupId
newVersion 设置的新版本号
nextSnapshot false 更新版本号为下一个快照版本号
oldVersion ${project.version} 指定需要更新的版本号可以使用缺省‘*'
processAllModules false 是否更新目录下所有模块无论是否声明父子节点
processDependencies true 是否更新依赖其的版本号
processParent true 是否更新父节点的版本号
processPlugins true 是否更新插件中的版本号
processProject true 是否更新模块自身的版本号
removeSnapshot false 移除snapshot快照版本,使之为release稳定版
updateMatchingVersions true 是否更新在子模块中显式指定的匹配版本(如/项目/版本)。

参考 versions-maven-plugin 命令介绍
项目demo代码maven-multily-mudule

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 关于spring三级缓存的解读

    关于spring三级缓存的解读

    Spring三级缓存解决循环依赖、AOP和多线程问题,包括singletonObjects、earlySingletonObjects和singletonFactories三层缓存,通过不同方法获取bean并解决这些问题
    2025-02-02
  • java中List、Array、Map、Set等集合相互转换

    java中List、Array、Map、Set等集合相互转换

    这篇文章主要介绍了java中List、Array、Map、Set等集合相互转换的相关资料,需要的朋友可以参考下
    2017-05-05
  • 关于SpringBoot使用@Async的总结

    关于SpringBoot使用@Async的总结

    这篇文章主要介绍了关于SpringBoot使用@Async的总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • JAVA应用系统工具快捷托盘实例代码

    JAVA应用系统工具快捷托盘实例代码

    JAVA应用系统工具快捷托盘实例代码,需要的朋友可以参考一下
    2013-02-02
  • 通过Java实现带干扰线的验证码

    通过Java实现带干扰线的验证码

    带干扰线的验证码是一种常见的安全验证方式,目的是通过图像中的干扰线增加机器识别的难度,确保只有人类用户能够顺利识别并输入验证码,本项目的目的是通过Java实现一个带有干扰线的验证码生成器,需要的朋友可以参考下
    2025-02-02
  • SpringBoot项目集成Swagger和swagger-bootstrap-ui及常用注解解读

    SpringBoot项目集成Swagger和swagger-bootstrap-ui及常用注解解读

    这篇文章主要介绍了SpringBoot项目集成Swagger和swagger-bootstrap-ui及常用注解解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • JAVA中关于Long类型返回前端精度丢失问题处理办法

    JAVA中关于Long类型返回前端精度丢失问题处理办法

    这篇文章主要介绍了后端JavaBean的id属性从Long类型改为雪花算法后出现的精度丢失问题,解决方案包括将id字段类型改为字符串或使用Jackson序列化方式,需要的朋友可以参考下
    2024-11-11
  • spring声明式事务@Transactional开发常犯的几个错误及最新解决方案

    spring声明式事务@Transactional开发常犯的几个错误及最新解决方案

    使用声明式事务@Transactional进行事务一致性的管理,在开发过程中,发现很多开发同学都用错了spring声明式事务@Transactional或使用不规范,导致出现各种事务问题,这篇文章主要介绍了spring声明式事务@Transactional开发常犯的几个错误及解决办法,需要的朋友可以参考下
    2024-02-02
  • springboot整合netty框架实现站内信

    springboot整合netty框架实现站内信

    Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,这篇文章主要介绍了springboot整合netty框架的方式小结,需要的朋友可以参考下
    2022-12-12
  • Java 递归查询部门树形结构数据的实践

    Java 递归查询部门树形结构数据的实践

    本文主要介绍了Java 递归查询部门树形结构数据的实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09

最新评论