【无标题】

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依赖,不声明不引入。
相关推荐
老前端的功夫1 天前
【Java从入门到入土】47:构建工具:Maven与Gradle的战争
java·python·maven
想你依然心痛1 天前
AtomCode 在 DevOps 场景中的实战:CI/CD 流水线脚本自动生成
运维·ci/cd·docker·devops·自动化部署·github actions
Wang's Blog2 天前
JavaWeb快速入门:Maven核心功能详解——标准项目结构、构建流程与依赖管理
java·maven
潘正翔2 天前
docker基础_镜像使用
linux·运维·服务器·docker·容器·centos·devops
love530love2 天前
AI Agent + 本地 ComfyUI 无头模式实战:关闭 IDE 后 AI 独立重启并完成图文生成
ide·人工智能·windows·python·音视频·agent·devops
智脑API平台2 天前
告警太多等于没告警:DevOps 用 Claude Code 做日志归因和发布复盘
运维·人工智能·devops·codex
hbugs0013 天前
【案例分享】全网首个华三数据中心流量可视化实验,基于EVE-NG V7平台
网络·网络协议·安全·devops·eve-ng
love530love3 天前
WorkBuddy + 本地 ComfyUI Wan2.1 文生视频实战:从连续报错到成功出片的完整踩坑记录
人工智能·windows·python·音视频·devops·comfyui·mcp
飘灬渺3 天前
Spring Boot :将自定义的 JAR 包引入到 Maven 项目中
spring boot·maven·jar