微服务项目maven编译很慢
Ⅰ 引入swagger项目无法正常启动--微服务环境下
1.问题描述:
使用alibaba微服务体系搭建的项目,模块管理使用的maven,给项目引入swagger做接口文档,启动时报错,报错信息如下:
2.问题解决
升级guava版本为20.0以上。
3.问题排查思路
首先,查看错误日志,错误日志中英文的大体翻译为,“尝试调用了一个不存在方法,发生的位置在 类中,下面这个方法不存在,可能方法存在....,guava-19.0.jar包中"
然后从错误日志中我们就可以分析出,由于guava-19.0这个jar引起的,并且报出的错误是某个方法不存在,那么我们就可以考虑到是这个jar的版本太低了,但是和swagger有什么关系那?那这个时候我们可以想到swagger有没有使用guava,打开编译器,查看swagger的包依赖关系:
使用idea的可以这样操作,右侧---》maven--->选中需要分析依赖的项目---》maven最上方有个show depenceies--->然后打开下面这张图--》左上角有个有 show conflicts--》红线就是有冲突的依赖--》放大就会发现如第二张图 swagger也依赖了guava,并且要求20.0的版本。
4.根本原因
maven的父子模块包依赖机制导致,父子项目依赖关系如下:
我们的项目就是在 父项目中引入的swagger,里面的swagger自己引入了20.0以上版本的guava使用,但是我们在子项目中又添加了如下依赖:
导致父项目的guava版本被覆盖成了19.0的低版本,所以无法找到swagger使用的某个方法了。
Ⅱ 如何使用 Maven 搭建 Spring Boot 父子项目
使用 Maven 搭建 Spring Boot 父子项目的步骤如下:
创建父项目:
- 使用 Maven 命令行工具创建一个新的 Maven 项目作为父项目。
- 在父项目的 pom.xml 文件中,设置 <packaging> 标签的值为 pom,这表示该项目是一个父 POM 项目。
- 在父项目的 pom.xml 中定义公共的依赖管理,包括 Spring Boot Starter 依赖等。这些依赖不会被父项目直接引入,但会被子项目继承。
创建子项目:
- 在父项目的根目录下,为每个微服务创建一个新的 Maven 子模块。
- 每个子模块的 pom.xml 文件需要引用父项目的 pom.xml,通过 <parent> 标签指定父项目的坐标。
- 在子项目的 pom.xml 中,根据需要引入具体的 Spring Boot Starter 依赖和其他必要的依赖。这些依赖将自动继承父项目中定义的版本,从而避免版本冲突。
构建和管理项目:
- 使用 Maven 的多模块构建功能,可以在父项目的根目录下执行 Maven 命令来构建所有子项目。
- 通过在父项目的 pom.xml 中定义构建插件和配置,可以简化构建和部署过程。
- 当需要更新依赖版本时,只需在父项目的 pom.xml 中更新相应的依赖版本,所有子项目都会自动继承并使用新的版本。
重点内容: 父项目:设置为 <packaging>pom</packaging>,管理公共依赖。 子项目:通过 <parent> 标签引用父项目,继承父项目的依赖管理。 构建:在父项目根目录下执行 Maven 命令,构建所有子项目。
按照这些步骤,你可以使用 Maven 搭建一个结构清晰、依赖管理方便的 Spring Boot 父子项目。