【无标题】

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

    • [1. 问题描述](#1. 问题描述)
    • [2. 解决方案](#2. 解决方案)
      • [2.1 父 pom配置](#2.1 父 pom配置)
      • [2.2 模块中pom文件配置](#2.2 模块中pom文件配置)
    • [3. 总结](#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 复制代码
<?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 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 复制代码
<?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 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依赖,不声明不引入。
相关推荐
NineData2 天前
DTCC 2026 预告|NineData CEO& 创始人叶正盛:面向 AI Agent 的数据库 DevOps 与数据复制实践
数据库·人工智能·数据库开发·devops·ninedata·数据库技术·dtcc
编程令我快乐3 天前
maven部分构建参数讲解
java·maven
7177773 天前
如何搭建信创研发交付体系?Gitee DevOps 国产化适配、安全与流水线能力解析
安全·gitee·devops
BIBI20493 天前
Windows 下 Maven 安装与 VSCode 配置
java·windows·vscode·maven·环境搭建·安装教程
m0_525724723 天前
AIOps全链路智能运维架构揭秘
云原生·devops
神奇小梵4 天前
《javaweb基础》后端篇————maven补充(用maven单元测试,maven常见问题)
单元测试·maven
开发者联盟league4 天前
maven核心插件介绍
java·maven
编程令我快乐4 天前
maven中deploy 的流程
java·maven
cakeism8254 天前
Gitee DevOps 平台定位、核心能力与选型指南
运维·gitee·devops