【无标题】

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依赖,不声明不引入。
相关推荐
卓怡学长3 小时前
w156一周穿搭App的设计与实现
java·spring boot·spring·maven·intellij-idea
砚底藏山河6 小时前
行情工程实战 M01|存储选型 CSVSQLiteMySQL
java·python·金融·maven
泡海椒19 小时前
JQuick-Curl 二次开发:自定义解析器、扩展点开发指南,如何把框架能力真正变成团队资产
java·开发语言·okhttp·maven
2601_962387822 天前
web自动化测试实战教程【selenium/unittest/pytest】【共193课
selenium·pytest·devops·web自动化测试·unittest
Wang's Blog2 天前
Vibe Coding一人即团队系列51: AI赋能项目交付与产品文档自动化生成实践
人工智能·自动化·devops
砚底藏山河2 天前
【量化纯GET实战 #21】用 pandas 做分析:把接口数据变成 DataFrame
java·python·金融·maven·pandas
qinqinzqq3 天前
Maven POM 格式、Schema 与 XSD:一篇讲透
java·maven
o盟3 天前
maven本地仓库有 总是去私仓中下载
java·maven·intellij-idea
Lyy3 天前
DevOps平台 — 第九篇:配置中心的设计与实现
后端·devops
还是大剑师兰特4 天前
Maven‑3.9.16 Windows 下载+安装+环境变量完整教程
java·windows·maven