maven多模块项目jar包依赖版本统一管理最佳实践

📅 2026/7/27 8:41:33 👁️ 阅读次数 📝 编程学习
maven多模块项目jar包依赖版本统一管理最佳实践

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依赖,不声明不引入。