maven多模块项目jar包依赖版本统一管理最佳实践
- 1. 问题描述
- 2. 解决方案
- 2.1 父 pom配置
- 2.2 模块中pom文件配置
- 3. 总结
1. 问题描述
现有一个基于Java8构建的供应链管理springboot项目,项目的目录结构如下:
- scm-parent(父工程)
- scm-web(模块)
- scm-service(模块)
- scm-domain(模块)
实现maven jar包依赖的统一版本管理。
2. 解决方案
1)version 只允许出现在一个地方(父 pom 的 )
2)子模块 dependency里不准写 (除非是本级模块互相引用)
2.1 父 pom配置
pom.xml文件只是一个示例,大家重点关注dependencyManagement, properties中定义的版本号变量即可。
<?xml version="1.0" encoding="UTF-8"?><projectxmlns="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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><name>scm-parent</name><groupId>com.xx</groupId><artifactId>scm-parent</artifactId><version>0.0.1</version><packaging>pom</packaging><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><project.scm.version>0.0.1</project.scm.version><serverframe.version>1.0.1-SNAPSHOT</serverframe.version><!-- 第三方依赖版本 --><lombok.version>1.18.22</lombok.version><mybatis.version>3.5.19</mybatis.version><mybatis-plus.version>3.5.12</mybatis-plus.version><mybatis-plus-generator.version>3.5.0</mybatis-plus-generator.version><docx4j.version>3.2.1</docx4j.version><shiro.version>1.7.1</shiro.version>...</properties><modules><module>scm-domain</module><module>scm-service</module><module>scm-web</module></modules><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>...</groupId><artifactId>...</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>${shiro.version}</version></dependency></dependencies></dependencyManagement></project>2.2 模块中pom文件配置
模块中pom文件只定位maven坐标,不能带版本号
<?xml version="1.0" encoding="UTF-8"?><projectxmlns="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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><name>scm-service</name><artifactId>scm-service</artifactId><version>${project.scm.version}</version><packaging>jar</packaging><parent><groupId>com.lehui.lhscm</groupId><artifactId>scm-parent</artifactId><version>0.0.1</version></parent><dependencies><!-- word模板引擎 --><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId></dependency><dependency><groupId>...</groupId><artifactId>...</artifactId></dependency></dependencies></project>3. 总结
dependencyManagement 本身不引入依赖,只是"版本声明":
- dependencyManagement:只有子模块声明了对应的maven坐标才引入指定版本的maven依赖,不声明不引入。