springcloud:微服务多模块的pom管理规范(十四)

springcloud:微服务多模块的pom管理规范(十四),第1张

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-dependenciesspring-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

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

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

3. 演示源码

cloud-study微服务项目maven依赖统一管理源码

详见上述源码中的springcloud2模块

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/874079.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存