关于拆分boot工程的踩坑之maven多模块间的依赖关系处理

2023-11-03 09:25:17 浏览数 (2)

一、辨析springboot与springcloud与springcloudalibaba

SpringBoot:这个大家经常使用应该明白, SpringCloud:cloud工程基于boot实现 SpringCloudAlibaba:基于SpringCloud实现

其实就是套娃关系,但是引入SpringCloud之后无需再次引入SpringBoot,而引入SpringCloudAlibaba一定需要引入SpringCloud,注意三者之间的版本关系,这里互联网上有许多,自行查看

SpringCloud的设计理念与SpringBoot是不一样的

springboot的设计理念是提供一种快速、轻松地构建独立、可执行的、生产级别的 Spring 应用程序的方式。Spring Boot 集成了大量的默认配置和开箱即用的功能,旨在减少开发者配置和繁琐的设置。

Spring Cloud 是用于构建分布式系统和微服务架构的项目。它的设计理念是提供一套工具和组件,以解决构建和管理分布式系统的挑战。Spring Cloud 在 Spring Boot 基础之上构建,旨在使开发者能够更轻松地构建和管理分布式架构。

二、maven的一些介绍

先介绍几个maven标签

  • modules:用于添加子模块
  • properties:自定义版本信息
  • dependencyManagement:依赖管理,只是做声明,不会真的引入依赖

三种版本管理方式

  • 在properties中定义版本号,子模块使用${}引入即可
  • 在dependencyManagement中声明依赖信息,子模块直接引入,不需要写版本号
  • 在properties定义版本,在dependencyManagement中声明,最后在子模块引入

笔者的一些最佳实践

  • 所有的依赖都在父模块中使用properties定义,便于统一管理
  • 只有所有模块都依赖的组件才在dependencyManagement中声明
  • 可以在dependencyManagement中声明自己的核心模块

三、踩坑点

1. mysql-connector-java

在boot项目中是有默认的版本号的,但是在cloud中没有,因为不同的服务使用的版本可能是不一样的,所以需要显示声明版本号,否则会找不到依赖

2. 最好使用上文的最佳实践

笔者在这块出了许多问题,但是只要按照上文三条规则来即可避免,也是踩的最多的坑

3. springcloud

在cloud中是不需要引入bootstart的,但是一定要引入spring-cloud-starter-bootstrap

4. nacos连接失败

  1. 检查版本问题,读者采用若依微服务版本,不可能有错
  2. 检查9848喝9849端口,新版本需要使用这两个
  3. 修改cloudalibaba版本 发现是9849拒绝连接 但是检查发现端口没有被占用
  4. 询问chatgpt
  5. 佛系重启
  6. 重启nacos,查看nacos配置
  7. 摆烂几个小时之后发现是nacos客户端版本问题
  8. 迅速去github找到nacos升级
  9. 启动连接成功

0 人点赞