• pom管理规范


    0. 引言
    在单机架构下,我们只需要将我们的依赖在pom中引入。但是过渡到微服务架构后,会涉及到多模块引用相同的依赖,多模版之间依赖的版本太过分散难以管理的问题。

    这就需要我们利用maven中依赖传递的特性,结合dependencyManagement标签来做好依赖的版本管理。下面我们就通过具体的案例来向大家演示如何在微服务架构中做好pom的管理规范。

    1. 在父项目中实现版本管理
    我们介绍的第一种版本管理的方案,就是在父项目中声明版本。

    我们先来看我们的案例:

    有一个微服务架构,包含商品模块product,订单模块order,网关模块gateway,还有一个公用模块commons。
    其中商品模块、订单模块都需要引入nacos、spring web、seata、mybatis-plus、swagger、mysql、lombok依赖
    订单模块中除了上述所说的依赖,还需要引入dynamic-datasource、openfeign依赖
    网关模块需要引入nacos discovery、gateway、jwt、swagger、lombok依赖

    1.1 在父项目中声明依赖版本
    ​​以下配置在父项目pom.xml中操作​​ 首先我们先将所需要的依赖的版本号定义为属性


            1.8
            3.8.1
            UTF-8
            UTF-8
            2.3.7.RELEASE
            2.2.2.RELEASE
            1.4.0
            2.9.2
            3.4.2


    其次我们在​​dependencyManagement​​标签中将所有的依赖做好版本声明

    如果不知道这些标签的作用以及用法的,可以先看专栏的上一篇博客:
    ​springcloud:maven快速上手 | maven常用标签(十三)​​


           
               
                    org.springframework.boot
                    spring-boot-dependencies
                    ${spring-boot.version}
                    pom
                    import
               

               
                    com.alibaba.cloud
                    spring-cloud-alibaba-dependencies
                    ${spring-cloud-alibaba.version}
                    pom
                    import
               

               
                    io.seata
                    seata-spring-boot-starter
                    ${seata-version}
               

               
                    com.alibaba.nacos
                    nacos-client
                    ${seata-version}
               

               
                    io.springfox
                    springfox-swagger2
                    ${swagger.version}
               

               
                    io.springfox
                    springfox-swagger-ui
                    ${swagger.version}
               

               
                    com.baomidou
                    mybatis-plus-boot-starter
                    ${mybatis-plus.version}
               

           
     
       


    这里咱们要注意的是,​​spring-boot-dependencies​​​和​​spring-cloud-alibaba-dependencies​​这两个依赖实际上并不是jar包,我们点击进去就可以知道,这是一个聚合项目,里面声明了常用的依赖的版本

    我们通过引用这个线程的聚合项目,节省了大量常用依赖的版本管理

    其次我们再在父项目中声明一下项目的jdk、maven版本以及编码格式。如果项目中有通用的maven插件配置,也可以在这里声明


           
               
                    org.apache.maven.plugins
                    maven-compiler-plugin
                    ${maven.version}
                   
                        ${java.version}
                        ${java.version}
                        UTF-8
                   

               

           

       


    1.2 服务的公用依赖提取到commons模块中
    ​​以下配置在commons模块的pom.xml中操作​​ 基于这样的一个案例,我们首先知道的是商品模块和订单模块中都有很多相同的依赖,那么我们把这些相同的依赖添加到公用模块中,如果没有公用模块,可以创建一个,专用于存储公用的实体类、工具类、公共依赖登

    首先我们需要声明父项目,以此使用父项目中声明的依赖版本


            springcloud2
            com.example
            1.0.0


    其次将公用的依赖声明出来,这里会发现我们这里的依赖是没有声明版本的,这是因为我们已经在父项目中将版本声明好了。这也就是我们要做版本管理的意义所在


           
                org.springframework.boot
                spring-boot-starter-web
           

           
                com.alibaba.cloud
                spring-cloud-starter-alibaba-nacos-config
           

           
                com.alibaba.cloud
                spring-cloud-starter-alibaba-nacos-discovery
           
     
           
                org.projectlombok
                lombok
           
     
           
                io.seata
                seata-spring-boot-starter 
           
     
           
                com.alibaba.nacos
                nacos-client 
           
     
           
                io.springfox
                springfox-swagger2
           
     
           
                io.springfox
                springfox-swagger-ui
           
     
           
                com.baomidou
                mybatis-plus-boot-starter
           
     
           
                mysql
                mysql-connector-java
                runtime
           

       


    1.3 商品、订单模块中引入commons模块
    1、然后在商品模块和订单模块引入commons模块


            springcloud2
            com.example
            1.0.0
       

        4.0.0
        product-server-feign
        ${parent.version}
        product-server-feign
        product-server-feign

       
           
                com.example
                commons
                1.0.0
           

       


    后续就可以只在commons中添加或者修改依赖,就能实现各个模块的公用依赖统一管理

    需要注意的是:​​子项目中一定要用parent标签声明好父项目​​ 2、因为订单模块中还多了其他几个依赖,所以我们除了commons外还要在订单的pom中额外引入其他依赖


            springcloud2
            com.example
            1.0.0
       

        4.0.0
        order-server-feign
        ${parent.version}
        ${project.artifactId}

       
           
                com.baomidou
                dynamic-datasource-spring-boot-starter
           

           
                org.springframework.cloud
                spring-cloud-starter-openfeign
           

           
                io.github.openfeign
                feign-httpclient
           

           
                com.example
                product-server-feign
                ${parent.version}
           

       

    3、commons中的公用依赖大部分网关模块都不需要,所以我们干脆就网关模块的依赖单独引入


            springcloud2
            com.example
            1.0.0
       

        4.0.0
        gateway-token
        ${project.parent.version}
        ${project.artifactId}

       
           
                com.alibaba.cloud
                spring-cloud-starter-alibaba-nacos-discovery
           

           
                org.springframework.cloud
                spring-cloud-starter-gateway
           

           
           
                io.jsonwebtoken
                jjwt
           

           
           
                io.springfox
                springfox-swagger2
           

           
           
                io.springfox
                springfox-swagger-ui
           

           
                org.projectlombok
                lombok
                true
           

       


    如上我们就针对我们整个项目的各个模块做好了依赖版本管理,如果需要查看源码可以文章最后的git地址中下载

    2. 在聚合项目中实现版本管理
    2.1 什么是聚合项目
    所谓聚合项目,就是单独的一个空maven项目,只有pom文件,专门用于依赖的版本声明,其他的项目通过引入该聚合项目来实现依赖版本管理

    这个比在父项目中进行版本管理更加凸显模块的专业化

    2.2 实操
    1、创建一个空maven项目,只保留pom.xml文件。将该项目的打包方式声明为pom

    pom
    1.
    2、然后将上述的父项目中的​​dependencyManagement​​标签中的依赖管理添加到聚合项目的pom文件中

    3、在商品服务、订单服务、网关服务、commons服务中引入该聚合项目,从而实现版本的统一管理

  • 相关阅读:
    华为云云耀云服务器L实例评测|SpringCloud相关组件——nacos和sentinel的安装和配置 & 运行内存情况 & 服务器被非法登陆尝试的解决
    wxpython控件textctrl如何设置enter事件
    详谈 MySQL 8.0 原子 DDL 原理
    CIKM 2020 | FANG:利用社会语境及其图表示进行假新闻检测
    读FFA-net: Feature Fusion Attention Network for Single Image Dehazing
    logback添加日志行号
    每章一篇博客带你拿下吉林大学JAVAEE期末(六:EJB)
    什么叫防御式编程
    Linux中的库(静态库和动态库)详解
    zabbix集成openldap认证
  • 原文地址:https://blog.csdn.net/fengbin2005/article/details/133636406