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

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

(0)

相关推荐

  • Maven多模块工程Module开发(图文教程)

    使用IDEA创建多模块开发 功能模块来分module 跟java的package类似,一般是按照的功能模块分module,比如:sso/cas/portal/activity/system,具体可根据需要 例如,在电商系统中如下module --module-test-common公共部分 --module-test-picture图片 --module-test-order订单 --module-test-checkout购物车 --module-test-pay支付 --module-tes

  • 详解使用Maven构建多模块项目(图文)

    Maven多模块项目,适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理.尤其是一些开源框架,也是采用多模块的方式,提供插件集成,用户可以根据需要配置指定的模块. 项目结构如下: test-hd-parent (父级) ---pom.xml ---test-hd-api (第三方接口层) ----pom.xml ---test-hd-foundation (基础工具层) ----pom.xml ---test-hd-resource (资源层) ----pom.xml -

  • maven多模块工程打包部署的方法步骤

    一般maven多模块工程结构如下图,图中分为dao数据层和上层web层(当然还可以有service层),在进行多模块划分的时候,一般将dao层采用jar进行打包,web层进行war打包.在进行war包部署时,发现dao是以jar包形式存在于lib包目录下,如果在部署服务器上需要进行相关配置修改会比较麻烦.因此研究了下用maven进行合并打包的方法: 1.确保dao pom.xml中有以下配置 <resources> <resource> <directory>${bas

  • Maven学习教程之搭建多模块企业级项目

    首先,前面几次学习已经学会了安装maven,如何创建maven项目等,最近的学习,终于有点进展了,搭建一下企业级多模块项目. 好了,废话不多说,具体如下: 首先新建一个maven项目,pom.xml的文件如下: 搭建多模块项目,必须要有一个packaging为pom的根目录.创建好这个maven项目后,我们对着项目右键-->new 输入你的项目名称 这里就不重复说创建项目了,创建好的目录结构在eclipse中如下: 说明一下这些项目具体都是干嘛的: easyframework-model:数据模

  • Maven的聚合(多模块)和Parent继承

    即使是长期从事 Maven 工作的开发人员也不能完全掌握聚合(多模块)和 Parent 继承的关系,在使用多模块时,子模块总要指定聚合的 pom 为 <parent>.由于在大多数示例中都是这么写的,所以很难让人搞懂这两者的具体作用和关系. 实际上在 Maven 中聚合(多模块)和继承是两回事,两者不存在直接联系. pom文档地址:https://maven.apache.org/pom.html Maven 完全参考:http://books.sonatype.com/mvnref-book

  • 基于maven使用IDEA创建多模块项目

    鉴于最近学习一个分布式项目的开发,讲一下关于使用IntelliJ IDEA基于Maven创建多模块项目的实际开发,可能有不合适的地方,但是项目是可以跑通的,也请有不足之处,都提出来,一起讨论下. 一. 项目工程目录 首先展示一下,最终整个项目的工程目录: 简单介绍一下目录结构: common-parent为所有项目的父项目,主要用来管理所有项目使用的jar包及其版本. common-utils为公共的工具类项目,继承父项目,它会被打成jar包供其它项目使用. taotao-manager为我们自

  • 详解Maven 搭建spring boot多模块项目(附源码)

    本文介绍了Maven 搭建spring boot多模块项目,分享给大家,具体如下: 备注:所有项目都在idea中创建 1.idea创建maven项目 1-1: 删除src,target目录,只保留pom.xml 1-2: 根目录pom.xml可被子模块继承,因此项目只是demo,未考虑太多性能问题,所以将诸多依赖.都写在根级`pom.xml`,子模块只需继承就可以使用. 1-3: 根级pom.xml文件在附录1 1-4: 依赖模块 mybatis spring-boot相关模块 2.创建子模块(

  • Maven多模块之父子关系的创建

    Maven多模块项目,适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理.尤其是一些开源框架,也是采用多模块的方式,提供插件集成,用户可以根据需要配置指定的模块. Maven多模块(pom) 1.1 父模块创建 先创建个简单的空的Maven Project作为父项目 1.2 子模块创建 重新创建一个Maven Project作为子项目 1.3 父子模块(继承关系) 注意:此时父子模块为两个独立的项目. 步骤1:子项目中加入<parent>节点,传入父项目完整坐标. 步骤

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

    对于使用maven构建的java项目,通常聚合多个子模块项目.在版本迭代的过程中经常变更版本号,更新parent版本号,发现子模块版本号没有更新,需要一个个的手动去更新,太麻烦,且容易出错. 在版本更新之后,内部模块之间的依赖也需要变更,往往存在遗漏. MAVEN多个子模块项目 以上是一个基本的 主项目parent包 maven-multily-module/pom.xml 指定整个应用的dependencyManagement 定义项目的发布的仓库地址distributionManagemen

  • 利用IDEA工具修改Maven多模块项目标识包名全过程记录

    目录 一.背景 二.具备的能力 2.1 IDEA 2.2 Maven多模块项目 三.步骤 3.1 移动包 3.2 选择重构的条件 3.3 清扫战场 3.4 小心毒刺 3.4.1 redis序列化问题 3.4.2 组件扫描 四.其它 一.背景 当我们为甲方服务提供软件开发服务时,需要按照甲方的要求去修改软件的标识,对于Maven项目来说就对应着groupId,一般地写对方公司的域名,如com.example.因此,项目中使用到的原来的代码需要赋予其新的标识. 二.具备的能力 2.1 IDEA ID

  • springboot+idea+maven 多模块项目搭建的详细过程(连接数据库进行测试)

    创建之前项目之前 记得改一下 maven  提高下载Pom速度 记得 setting 中要改 maven  改成 阿里云的.具体方法 网上查第一步 搭建parents 项目,为maven项目 ,不为springboot 项目 记得修改groupId 第二步 搭建多个子模块, honor-dao   honor-manager   honor-common记得创建 honor-manager 的时候 要把他的gruopId 改成com.honor.manager 这里爆红的原因是 因为 我做到后面

  • Maven 多模块父子工程的实现(含Spring Boot示例)

    一.为什么要用Maven多模块 假设有这样一个项目,很常见的Java Web应用.在这个应用中,我们分了几层: Dao Service Web 对应的,在一个项目中,我们会看到一些包名: org.xx.app.dao org.xx.app.service org.xx.app.web org.xx.app.util 但随着项目的进行,你可能会遇到如下问题: 这个应用可能需要有一个前台和一个后台管理端,你发现大部分dao,一些service,和大部分util是在两个应用中可. pom.xml中的依

  • 构建Maven多模块项目的方法

    目录 构建Maven多模块项目 创建父模块 创建子模块:model层 创建子模块:dao模块 创建子模块:service层 创建子模块:web层 编译运行项目 Maven相关特性 父模块的配置 父模块聚合子模块 父模块统一管理依赖包 子模块在pom.xml中声明父模块 参考文章 构建Maven多模块项目 JavaWeb开发一般都会进行分层开发,通常分为 model,模型层 dao,数据访问层 service,业务逻辑层 web,表现层 分层后,各层职责明确,后期维护起来也会容易一些.接下来我们就

  • maven多模块项目依赖管理与依赖继承详解

    目录 maven多模块项目依赖管理与依赖继承 1.指定父模块与默认继承 2.依赖管理 关于maven项目依赖继承问题 只需要在父项目中加入 并且把父项目已POM的形式 然后在子项目中以<parent>标签 maven多模块项目依赖管理与依赖继承 1.指定父模块与默认继承 dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承) 父模块的pom <?xml version="1.0" encoding="UTF-8

  • springboot实现maven多模块和打包部署

    目录 创建多模块项目 依赖关系 开发工具 :idea 工程结构: 父工程father 子模块 dao (用于持久化数据跟数据库交互) 子模块 entity (实体类) 子模块 service (处理业务逻辑) 子模块 web (页面交互接收.传递数据,唯一有启动类的模块) 关系: web依赖 service.dao.entity service依赖 dao.entity dao依赖 entity entity谁都不依赖,独立的 创建多模块项目 new ------file-------proje

  • Maven分模块开发与依赖管理和聚合和继承及属性深入详细介绍

    目录 前言 分模块开发 1.1 分模块开发理念 1.按照功能拆分 2.按照模块拆分 1.2 分模块开发实现 2.依赖管理 2.1 依赖传递与冲突问题 2.2 可选依赖和排除依赖 3.聚合和继承 3.1 聚合 3.2 继承 3.3 聚合VS继承 4.属性 4.1 定义父工程属性 4.2 修改依赖的version 5.配置文件加载属性 5.1 父工程定义属性 5.2 jdbc.properties文件中引用属性 5.3 设置maven过滤文件范围 前言 对于复杂庞大的项目,maven的熟练使用可以大

随机推荐