Spring Boot3 基础架构规范及搭建实战 - 3.统一Parent 实现包管理

为什么要实现统一的 Parent 来进行包版本管理呢?

你有没有在开发过程中遇到过包依赖冲突而导致的问题? class not found? 明明编译通过的情况下却启动不起来?

而这些问题大部分都是依赖包冲突导致的。

ChatGPT 针对该问题是这样回答的:

实现统一的 Parent 来进行包版本管理有以下几个原因:

  1. 简化依赖管理:通过使用统一的 Parent,可以集中管理项目中使用的所有依赖包的版本。这样可以避免不同模块或组件之间使用的依赖包版本冲突的问题,减少开发人员在解决依赖冲突上的时间和精力。
  2. 提高项目的稳定性:统一的 Parent 可以确保所有的子模块都使用相同的依赖版本,从而减少由于不同模块使用不同版本的依赖包而导致的潜在问题。这有助于提高项目的稳定性和可靠性。
  3. 统一的构建配置:通过统一的 Parent,可以定义一致的构建配置和插件设置,确保所有的子模块都遵循相同的构建规范。这样可以减少开发人员在配置和管理构建过程中的工作量,并提高项目的一致性。
  4. 简化项目维护:使用统一的 Parent 可以使项目结构更清晰,便于维护和管理。所有的子模块都可以共享相同的构建配置和依赖管理,使项目的结构更加统一和可维护。

总之,通过实现统一的 Parent 来进行包版本管理,可以简化依赖管理、提高项目的稳定性、统一构建配置和简化项目维护,从而提高开发效率和项目质量。

开始搭建我们的公共 Parent 项目吧!

  1. idea 新建普通项目

在这里插入图片描述

注意:

我们是用 SpringBoot 3.1.5 版本来做例子,3.1.5 版本要求 JDK版本为 17+

  1. 删除项目中的 src 文件夹 (我们的项目打包为 pom,无需编写 src 代码,只需维护 pom.xml 即可)

  2. 打开 pom.xml 新增 parent 标签,指定 SpringBoot 版本

    org.springframework.boot spring-boot-dependencies 3.1.5
  3. 在本项目的 gav 坐标下面新增 package 标签,指定打包为 pom

    <groupId>com.innoud</groupId>
    <artifactId>innoud-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
  1. 维护公司内可能用到的 jar 包及版本
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- 包管理版本 -->
        <commons-io.version>2.14.0</commons-io.version>
        <commons-lang3.version>3.13.0</commons-lang3.version>
        <commons-codec.version>1.16.0</commons-codec.version>
        <commons-collections4.version>4.4</commons-collections4.version>
        <mysql-connector.version>8.1.0</mysql-connector.version>
        <mybatis-spring.version>2.1.1</mybatis-spring.version>
        <mybatis-plus.version>3.5.4</mybatis-plus.version>
        <fastjson2.version>2.0.41</fastjson2.version>
        <easyexcel.version>3.3.2</easyexcel.version>
        <lombok.version>1.18.30</lombok.version>
        <redisson.version>3.24.2</redisson.version>
        <springdoc.version>2.2.0</springdoc.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- apache commons -->
            <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>${commons-io.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${commons-lang3.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>${commons-codec.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-collections4</artifactId>
                <version>${commons-collections4.version}</version>
            </dependency>
            <!-- 数据库 -->
            <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
            <dependency>
                <groupId>com.mysql</groupId>
                <artifactId>mysql-connector-j</artifactId>
                <version>${mysql-connector.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>${mybatis-spring.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-core</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-extension</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
            <!-- fastjson -->
            <!-- https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2 -->
            <dependency>
                <groupId>com.alibaba.fastjson2</groupId>
                <artifactId>fastjson2</artifactId>
                <version>${fastjson2.version}</version>
            </dependency>
            <!-- easyexcel -->
            <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>easyexcel</artifactId>
                <version>${easyexcel.version}</version>
            </dependency>
            <!-- lombok -->
            <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
            <!-- redisson -->
            <dependency>
                <groupId>org.redisson</groupId>
                <artifactId>redisson-spring-boot-starter</artifactId>
                <version>${redisson.version}</version>
            </dependency>
            <!-- springdoc -->
            <dependency>
                <groupId>org.springdoc</groupId>
                <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
                <version>${springdoc.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
  1. 指定我们的 Maven 私服地址
    <distributionManagement>
        <!-- 两个ID必须与 setting.xml中的<server><id>nexus-releases</id></server>保持一致-->
        <repository>
            <id>nexus-releases</id>
            <name>nexus-releases</name>
            <url>http://localhost:9001/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <name>nexus-snapshots</name>
            <url>http://localhost:9001/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

整体 pom.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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>3.1.5</version>
    </parent>

    <groupId>com.innoud</groupId>
    <artifactId>innoud-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- 包管理版本 -->
        <commons-io.version>2.14.0</commons-io.version>
        <commons-lang3.version>3.13.0</commons-lang3.version>
        <commons-codec.version>1.16.0</commons-codec.version>
        <commons-collections4.version>4.4</commons-collections4.version>
        <mysql-connector.version>8.1.0</mysql-connector.version>
        <mybatis-spring.version>2.1.1</mybatis-spring.version>
        <mybatis-plus.version>3.5.4</mybatis-plus.version>
        <fastjson2.version>2.0.41</fastjson2.version>
        <easyexcel.version>3.3.2</easyexcel.version>
        <lombok.version>1.18.30</lombok.version>
        <redisson.version>3.24.2</redisson.version>
        <springdoc.version>2.2.0</springdoc.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- apache commons -->
            <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>${commons-io.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${commons-lang3.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>${commons-codec.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-collections4</artifactId>
                <version>${commons-collections4.version}</version>
            </dependency>
            <!-- 数据库 -->
            <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
            <dependency>
                <groupId>com.mysql</groupId>
                <artifactId>mysql-connector-j</artifactId>
                <version>${mysql-connector.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>${mybatis-spring.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-core</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-extension</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
            <!-- fastjson -->
            <!-- https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2 -->
            <dependency>
                <groupId>com.alibaba.fastjson2</groupId>
                <artifactId>fastjson2</artifactId>
                <version>${fastjson2.version}</version>
            </dependency>
            <!-- easyexcel -->
            <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>easyexcel</artifactId>
                <version>${easyexcel.version}</version>
            </dependency>
            <!-- lombok -->
            <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
            <!-- redisson -->
            <dependency>
                <groupId>org.redisson</groupId>
                <artifactId>redisson-spring-boot-starter</artifactId>
                <version>${redisson.version}</version>
            </dependency>
            <!-- springdoc -->
            <dependency>
                <groupId>org.springdoc</groupId>
                <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
                <version>${springdoc.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <distributionManagement>
        <!-- 两个ID必须与 setting.xml中的<server><id>nexus-releases</id></server>保持一致-->
        <repository>
            <id>nexus-releases</id>
            <name>nexus-releases</name>
            <url>http://localhost:9001/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <name>nexus-snapshots</name>
            <url>http://localhost:9001/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

</project>
  1. 执行 mvn package 发现打包无异常
  2. 执行 mvn deploy 将我们的父 pom 上传到 maven 私服中 此时发现报错了 status code: 401, reason phrase: Unauthorized (401)
  3. 打开 idea 的 settings 发现默认用户配置文件是 .m2/settings.xml 文件

在这里插入图片描述

我们可以将修改好的 settings.xml 文件放置到该目录下面,也可以勾选重写后选择我们改好的 settings.xml

  1. 修改后我们再次进行 deploy 发现已经可以正常进行 deploy 操作了
  2. 打开我们的 nexus 管理端页面 可以看到我们的 parent 已经 deploy 到我们的 maven 私服仓库中了,这时候团队内成员在使用同一个私服仓库时候就可以拉取到我们deploy 的包了

在这里插入图片描述

我们的包管理目前只是初始阶段,后面随着课程的继续深入,会遇到各种各样的问题,我们会对其进行逐一解决!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值