Erlo

如何简洁高效的搭建一个SpringCloud2023的maven工程

2024-03-06 14:29:17 发布   50 浏览  
页面报错/反馈
收藏 点赞

前言

依赖管理有gradle和maven,在这里选择比较常用和方便的Maven作为工程项目和依赖管理工具来搭建SpringCloud实战工程。主要用到的maven管理方式是多模块和bom依赖管理。

什么是maven的多模块依赖管理

Maven 多模块项目相对于单模块项目而言,依赖是不共享的,但父模块提供了全局共享依赖的功能,可以针对不同模块所需要依赖的包进行分模块引入。具体如下:

  • 所有子模块都依赖的包,如junit可以统一由父模块中的设置依赖。
  • 多个子模块但非全部子模块依赖的包,可以在父模块中的中统一管理依赖版本,再由每个子模块自主引入依赖,这样设置可以达到项目中多个子模块依赖的包版本统一的目的。
  • 单个子模块依赖的包,可以直接交由这个子模块引入即可。但有时候出于对后续可能添加子模块考虑,即使当前只有一个子模块依赖的包,也可以统一交由父模块的统一管理,而如果确认后续不会再加子模块的,可以按前者进行处理。

在父模块中,可通过统一管理依赖包的版本,让共享包也更加统一管理。

什么是maven的bom依赖管理

Maven 的 BOM(Bill of Materials)依赖管理是一种用于集中管理项目依赖关系和版本的方式,它提供了一种方便的方法来确保多个项目或模块在使用相同依赖时具有一致的版本。

BOM 通常是一个特殊的 Maven POM(Project Object Model)文件,其中定义了项目所需的依赖项及其版本。通过在其他项目中引用这个 BOM,这些项目将自动获取 BOM 中定义的依赖版本,而无需明确指定每个依赖的版本。

这样做的好处是可以减少重复的依赖配置工作,并确保在多个项目中使用相同的依赖版本,从而减少由于依赖不一致导致的问题。此外,BOM 还可以用于管理依赖的升级和版本控制,只需在 BOM 中更新依赖的版本,所有引用该 BOM 的项目都会自动获取最新的版本。

要使用 Maven 的 BOM 依赖管理,通常需要执行以下步骤:

  • 创建或获取一个 BOM POM 文件,其中定义了项目的依赖和版本信息。
  • 在需要使用 BOM 的项目中,通过在部分引用 BOM POM 文件。
  • 在项目的具体依赖部分,可以直接使用 BOM 中定义的依赖,而无需明确指定版本。

组件选型

在“SpringCloud2023最新版本该如何进行组件选型?”一文中已经具体的介绍了SpringCloud的组件对比和选型,具体可以查看合集里面的相关文档。

  • 注册中心(Spring Cloud Zookeeper):负责服务的注册和发现。
  • 网关(Spring Cloud Gateway):作为外部请求的入口,实现路由和负载均衡。
  • 云服务配置(Spring Cloud Config):用于管理服务的配置信息。
  • 熔断(Sentinel):提供熔断器功能,实现服务的限流和降级。
  • 服务追踪(Micrometer Tracing):用于追踪和监控服务的性能和调用情况。
  • 测试集成(JUnit 5 + Spring Boot Test):用于编写和执行单元测试。
  • 远程调用(OpenFeign):用于服务之间的远程调用。
  • 接口文档(springdoc-openapi + openapi3):用于生成和管理 API 的文档。
  • 分布式事务(Seata):用于处理跨多个服务的事务。

版本选择

在“SpringCloud和SpringBoot的版本依赖该怎么选择”一文中已经具体的介绍了SpringCloud的版本如何选择,具体可以查看合集里面的相关文档。

组件 版本
jdk 17
spring boot 3.2.x
spring cloud 2023.0.x
spring cloud alibaba 2022.0.0.0(还未更新,但是兼容2023)

为什么选择JDK17

选择JDK17的原因如下:

  • JDK 17是 LTS(长期支持版)。
  • JDK 17性能提升不少。
  • 大多数第三方框架和库都已经支持,不会有什么大坑。
  • JDK 17有更多的新特性支持。

Maven工程依赖说明

|-- banana-client1
|-- banana-client2
|-- banana-client3
|-- banana-client4-sentinel
|-- banana-client5-tracing
|-- banana-client6-test
|-- banana-common
|   |-- banana-common-bom
|   `-- banana-common-core
|-- banana-config
|-- banana-gateway
|-- banana-gateway-sso
`-- banana-seata-example
  • 根目录下的pom.xml负责管理整个项目的版本和依赖引入版本管理,以及子模块的管理。
  • banana-common-bom 负责管理整个公共依赖的版本,比如undertow、swagger的版本。
  • banana-common-core 负责管理整个公共组件的引入,比如 hutool、validation、test等。
  • gateway 相关项目为SCG相关工程。
  • client 相关项目为springboot相关工程。
  • 其他工程会在后续的文章说明。欢迎持续关注。

顶级工程pom.xml配置

该maven的pom文件定义了如下内容:

  • Maven 项目的模块列表
  • Maven 项目的属性列表
  • Maven 项目的依赖管理
  • Maven 项目的仓库列表
  • Maven 项目的构建配置


    
    4.0.0
    
    io.rainforest
    
    banana
    
    1.0
    
    pom

    
    
        banana-gateway
        banana-config
        banana-common
        banana-client1
        banana-client2
        banana-client3
        banana-client4-sentinel
        banana-client5-tracing
        banana-client6-test
        banana-seata-example
        banana-gateway-sso
    

    
    
        
        17
        
        17
        
        UTF-8
        
        3.2.3
        
        2023.0.0
        
        2022.0.0.0
    

    
    
        
        
            
            
                io.rainforest
                banana-common-bom
                ${project.version}
                pom
                import
            
            
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot.version}
                pom
                import
            
            
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                ${spring-cloud-alibaba.version}
                pom
                import
            
        
    

    
    
        
        
            central
            Central Repository
            https://mirrors.huaweicloud.com/repository/maven/
            default
            
                false
            
        
    

    
    
        
        ${project.name}
        
        
            
            
                src/main/resources
                
                true
            
        
        
        
            
            
                
                
                    org.springframework.boot
                    spring-boot-maven-plugin
                    ${spring-boot.version}
                    
                        
                        ${project.build.finalName}
                        
                        
                            true
                        
                    
                    
                    
                        
                        
                            
                                repackage
                            
                        
                    
                
            
        
    

工程的公用依赖bom配置

该maven的pom文件定义了如下内容:

  • Maven 项目的属性列表,包含版本等信息
  • Maven 项目使用到的依赖版本管理


    io.rainforest
    banana-common-bom
    1.0

    4.0.0
    pom
    banana-common-bom 公共依赖管理

    
        ${project.version}
        3.1.3
        UTF-8
        2.17.1
        17
        17
        4.9.9
        0.0.39
        1.2.83
        2.1.0
        2.2.14
        3.5.3.2
        8.0.33
        4.1.3
        1.6.1
        3.1.0
        7.1
        3.0.0
        2.3.5
        5.4.0
        5.8.21
        3.0.8
        1.8.4
    
    
    
        
            
                io.rainforest
                banana-common-core
                ${banana.common.version}
            
            
                com.mysql
                mysql-connector-j
                ${mysql.version}
            
            
            
                org.springdoc
                springdoc-openapi-starter-webflux-ui
                ${springdoc.version}
            
            
                org.springdoc
                springdoc-openapi-starter-webmvc-api
                ${springdoc.version}
            
            
                io.swagger.core.v3
                swagger-annotations-jakarta
                ${swagger.core.version}
            
            
            
                com.alibaba
                fastjson
                ${fastjson.version}
            

            
            
                com.baomidou
                dynamic-datasource-spring-boot3-starter
                ${dynamic-ds.version}
            
            
            
                io.springboot.sms
                aliyun-sms-spring-boot-starter
                ${sms.version}
            
            
            
                io.seata
                seata-serializer-kryo
                ${seata.version}
            
            
            
                com.baomidou
                mybatis-plus-boot-starter
                ${mybatis-plus.version}
            
            
                com.baomidou
                mybatis-plus-extension
                ${mybatis-plus.version}
            
            
                com.baomidou
                mybatis-plus-annotation
                ${mybatis-plus.version}
            
            
            
                cn.hutool
                hutool-bom
                ${hutool.version}
                pom
                import
            
            
            
                net.dreamlu
                mica-bom
                ${mica.version}
                pom
                import
            
            
            
                org.springframework.boot
                spring-boot-starter-web
                ${spring-boot.version}
                
                    
                    
                        spring-boot-starter-tomcat
                        org.springframework.boot
                    
                
            
            
                com.github.xiaoymin
                knife4j-openapi3-jakarta-spring-boot-starter
                4.3.0
            
        
    

    
        
            
            
                io.github.git-commit-id
                git-commit-id-maven-plugin
                ${git.commit.plugin}
            
            
            
                io.spring.javaformat
                spring-javaformat-maven-plugin
                ${spring.checkstyle.plugin}
            
        
    


源码信息

和“SpringCloud实战”对应的源码信息如下:

关于作者

来自一线全栈程序员nine的八年探索与实践,持续迭代中。欢迎关注“雨林寻北”或添加个人卫星codetrend(备注技术)。

登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

手机查看

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认