Maven多模块项目版本统一管理

如图所示,项目中定义了这样几个模块:
- pdd-workflow-build :定义项目版本,及全局配置
- pdd-workflow-dependencies :外部依赖管理,统一管理所有用到的外部依赖的版本
- pdd-workflow-service :项目service模块
- pdd-workflow-web :项目web模块
- pdd-parent :聚合模块
模块之间的继承依赖关系如下图所示:

网上都说用${revision}这样的占位符,而且必须叫“revision”这个名字。但是,我自己实践过后发现,这个变量叫什么都可以(比如:common.version),关键在于要有一个聚合模块将所有引用了${revision}的模块都聚合进来,不然打包的时候还是会找不到版本。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<artifactId>pdd-workflow-build</artifactId>
<version>${revision}</version>
<relativePath>./pdd-workflow-build/pom.xml</relativePath>
</parent>
<artifactId>pdd-workflow-parent</artifactId>
<packaging>pom</packaging>
<modules>
<module>pdd-workflow-build</module>
<module>pdd-workflow-dependencies</module>
<module>pdd-workflow-service</module>
<module>pdd-workflow-web</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>pdd-workflow-dependencies</artifactId>
<version>${project.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
众所周知,<parent>中的版本必须是常量,不能是变量,不然就找不到版本。但是,只要我们增加一个聚合模块就可以解决这个问题,在聚合模块中引用变量是可以的。所以,叫不叫revision根本无所谓,变量名而已,关键在于<modules>。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<artifactId>pdd-workflow-build</artifactId>
<version>${revision}</version>
<relativePath>../pdd-workflow-build/pom.xml</relativePath>
</parent>
<artifactId>pdd-workflow-dependencies</artifactId>
<packaging>pom</packaging>
<properties>
<dubbo.version>3.2.5</dubbo.version>
<spring-boot.version>3.2.0</spring-boot.version>
<druid.version>1.2.20</druid.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<artifactId>pdd-workflow-parent</artifactId>
<version>${revision}</version>
</parent>
<artifactId>pdd-workflow-web</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>pdd-workflow-service</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>

参考Seata,看看Seata是如何统一管理版本的


代码地址:https://gitee.com/chengjiansheng/pdd-workflow
Maven多模块项目版本统一管理的更多相关文章
- Maven多模块项目依赖管理
Maven多模块项目依赖管理及dependencies与dependencyManagement的区别 转自:http://blog.csdn.net/liutengteng130/article/d ...
- IntelliJ Idea14 创建Maven多模块项目
Maven多模块项目的参考资料 Sonatype上的教程 http://books.sonatype.com/mvnex-book/reference/multimodule.html 在这个教程里, ...
- Maven多模块项目搭建
最近一直在思考如何能够更好的重用代码.减少重复劳动,之前有一篇文章通过导入JAR包的形式,可以重用部分形如util类的方法,但是这样的话,管理起来jar包,特别是协同工作,多项目情况下,管理JAR会出 ...
- 「 从0到1学习微服务SpringCloud 」09 补充篇-maven父子模块项目
系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」06 统一配置中心Spring Cloud Config 「 从0到1学习微服务SpringCloud 」07 RabbitM ...
- SpringBoot+Maven 多模块项目的构建、运行、打包实战
前言 最近在做一个很复杂的会员综合线下线上商城大型项目,单模块项目无法满足多人开发和架构,很多模块都是重复的就想到了把模块提出来,做成公共模块,基于maven的多模块项目,也好分工开发,也便于后期微服 ...
- maven多模块项目构建
描述 一个大的企业级项目通常跨越了数十万行代码,牵涉了数十或数百软件人员的努力.如果开发者在同一个项目下开 发,那么项目的管理.构建将会变得很难控制.因此设计人员会将项目划分为多个模块,多个模块独 ...
- Spring Boot 项目实战(一)Maven 多模块项目搭建
一.前言 最近公司项目准备开始重构,框架选定为 Spring Boot ,本篇主要记录了在 IDEA 中搭建 Spring Boot Maven 多模块项目的过程. 二.软件及硬件环境 macOS S ...
- maven多模块项目找不到Class错误
接手了一个maven管理的多模块项目,又是javaconfig,又是spring data jpa,还算是比较新比较正规的模块化结构吧..然后我往其中的一个模块中新添加了一个jpa的entity,然后 ...
- Maven入门,Maven项目的创建,nexus 2.x搭建私服以及Maven多模块项目创建
maven的了解做一个总结,以便日后查阅, 若有不足之处,还望指出,学无止境 当然也能起到入门效果. 一,搭建maven私服 1.工具 a. Nexus 2.5.1-01 b. Maven 3.3.9 ...
- eclipse导入SVN上的Maven多模块项目
eclipse导入SVN上的Maven多模块项目 博客分类: Eclipse&MyEclipse SVN Maven 一.SVN上Maven多模块项目结构 使用eclipse导入SVN上的 ...
随机推荐
- 15-TTL与非门
TTL与非门 集成电路有两大类COMOS和TTL(三极管) 电路结构 工作原理 多发射结的三极管,两个输入之间是与的关系 输入低电平 输入高电平 A.B都是高电平 倒置放大 压差大的先导通 T3,T4 ...
- Go-值传递&引用传递
值类型和引用类型 值类型关注其值 引用类型关注其指针 值类型和引用类型区别在于传递值的时候拷贝的对象不同,值传递拷贝是变量的值,引用传递拷贝的是变量的指针 拷贝 -- 传递值 赋值 函数调用 初始化 ...
- 达梦数据库varchar和nvarchar的验证
达梦数据库varchar和nvarchar的验证 测试SQL create tablespace zhaobsh datafile '/opt/dmdbms/data/DAMENG/zhaobsh.d ...
- Jmeter之二_JSR223取样器,断言等添加失败的解决办法
Jmeter之二_JSR223取样器,断言等添加失败的解决办法 背景 最近在学习jmeter 但是发现在进行JSR223的相关取样器以及断言处理时出现了错误: java.lang.NoClassDef ...
- [转帖]记一次vcsa6修复过程
一. 某天发现一台vmware vCenter Server Appliance services 6偶尔能登陆了,但极不稳定,连shell都偶尔能进...... 然后利用各种手段想方设法进到she ...
- JS ----- JS实用小功能
1.复制页面上文字功能 function copyIdCode() { var idcode = document.getElementById("personIdcodeCopy" ...
- 有道云笔记之备选方案Obsidian和Notion
有道云笔记限制登录设备 在商业项目中一般都会有plana.planb,对于云笔记,我也在寻找planb,有道云笔记在国内市场已经占据了很大的份额. 同类型中的就不再去挑选了,我觉得商业软件,迟早也会走 ...
- @RequestBody中使用@DateTimeFormat报错:JSON parse error: Expected array or string.; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException
原因分析 根据异常提示:不匹配输入异常,指输入的参数错误,说是只支持String类型和Array数组类型的. @PostMapping("/test") public Dto ge ...
- spring框架中RESTFUL接口相关注解
1.说明 springboot 是国内最常用的web框架,因为它的http server功能是最重要的.本文列举了一些现在通用的restful形式的接口所需要的注解 2.@RequestMapping ...
- 【OpenCV】在Linux上使用OpenCvSharp
前言 OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,它具有C++,Python,Java和MATLAB接口,并支持Windows,Linux,Androi ...