关于开发中的版本问题的一点小建议_什么是版本问题-程序员宅基地

技术标签: 学习  java  后端  

关于开发中的版本问题的一点小建议

■ 本文是以springboot项目开发中遇到的问题为例:

1、背景:

学习springboot 视频的时候,我选的一个视频时叩丁狼的蓝老师的视频,理由:老师的声音非常温柔,nice~

视频的拍摄时间是2017年的,那年流行的(视频老师的springboot版本) 是版本1.5.7.RELEASE,而现在,是2022年,springboot都出版本3了,

但是我又喜欢听老师的声音,于是我自个使用的是版本2.6.5的,然后问题来了:

2、需求:springboot 整合 德鲁伊连接池、整合mybatis

(1)需求1:springboot 整合 德鲁伊连接池【没问题】:

  • pom文件中,使用的德鲁伊版本:1.1.17;数据库连接驱动的版本是父项目统一管理的版本;jdbc的版本也是父项目统一管理的版本
  • 运行结果:成功,即springboot 整合 Druid 成功

(2)需求2:springboot 整合 mybatis【 问题来了 】:

  • pom文件中,使用的mybatis集合springboot的版本是最新的 2.2.2,报错:

■ 报错信息:

java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.mybatis.spring.annotation.MapperScan.factoryBean()
......

■ 解决方案: 无解 ,内网、外网,把能搜的地方全搜了,只找到两个说法。

说法1:把mybatis-spring集成的 jar包导入 问题便解决,~but,我明明一大早就导入了。

说法2: 版本问题 ,emmm,于是,我就在maven仓库试了两三个最新版本之后,网搜,看到一个版本就试试,结果,快emo了,还是报同一个错误。

3、我开始了自我摸索解决bug之路

(1)首先排除自己的代码出错的情况:

​ 我决定,减低springboot项目的版本跟视频一致,为1.5.7.RELEASE,同时更改Druid和mybatis-springboot集成的版本,同一保持跟视频一致。其中Druid的版本为:1.1.4;而mybatis-spring的版本为:1.3.0。

  • 验证:成功通过,证明代码是没有问题的

补充一个小知识:

当idea中maven项目报错的时候,看一眼idea底部是不是有进度条,进度条的状态是正在下载。有下载的进度条,解决错误的方式就是等待。没有则需手动搜索解决bug。

★ 可能刚建立完springboot 项目,maven会爆红;

★ 可能在pom文件中导入新的依赖时,maven会爆红;

★ 可能是在pom文件中更改整个springboot的版本时,maven会爆红;

✿ 解决:先看看底部有无下载进度条,有着等进度条下载完成即可,没有则尝试刷新一下maven项目。

(2)尝试再把springboot项目版本替换为2.6.5:

  • 结果:报错
//报druid的错误:
java.lang.IllegalStateException: Failed to introspect Class [com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure] from ClassLoader 
Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvider

■ 解决:更换druid 版本:

  • 尝试更换德鲁伊版本为最新版本-1.2.8

  • 结果:问题解决了哈哈哈

4、关于此次版本乌龙的小心得

  • 小建议:时间比较赶,看项目视频学习完,需要立马去赶项目,建议:视频版本挑比较新的,然后版本跟视频一致即可。

  • 小心得:关于版本问题的解决思路: 依赖的版本的替换 、 项目的版本也可替换

    ■ 这个版本问题产生情况:

    • 依赖之间的版本冲突、项目和依赖之间的版本冲突。

    ■ 关键:如何解决版本问题:

    • 前提是先验证自己的代码没有问题(上文提供了一种验证方法)

    • 看报错信息:控制台的报错(控制台没有报错信息,找找日志文件),去搜解决方案

      • idea中快速打开日志文件:

  • 我常搜解决方案的地方:

    ① 直接百度搜;② csdn( 看一两个即可 ,基本解决方案都擂台,不用再浪费时间了) ③ 博客园 ④ 知乎

    ④ 外网-Stack Overflow(这个网站非常nice~,国外最大的问答平台)

  • 搜索之后的解决方案,没能解决,此时---需要冷静下来,自己一步一步分析:

    • 报错之前,干了什么----思路是倒序着去排除错误,最后干的嫌疑最大,从后往前排除

★ 我本次问题的解决真实情况:

是通过减低版本和视频老师一致的时候,在排除代码本身问题之后,把版本替换为原先自己想要的版本,通过控制台的报错提示,成功解决了问题哈哈哈。

真实情况:【 本次项目真实bug来自项目版本 】

  • 我验证完成之后,我需要替换项目为原来版本的时候,版本是2.6.5, 我懒得复制粘贴,手打输入成2.5.6,然后通过控制台的提示,就成功解决了,

    替换成2.6.5版本,就又可以让人emo啦!

■ 倒序排错思路:

① 首先验证排除掉是自己的代码本身的问题,让问题锁定到pom文件中的依赖上

② 我的需求是springboot 整合 德鲁伊连接池、整合mybatis,在pom.xml 最后引入的依赖是mybatis-springboot,运行报错,网搜解决方案---提示引入mybatis-springboot的依赖和该依赖的版本【 非该问题,问题依旧存在 】

③ 倒序---springboot 整合 德鲁伊连接池,自己引入的依赖中含有版本的是Druid,更换Druid版本

★ 建议更换依赖的版本的参考标准:

  • maven 显示的 Compile Dependencies 和 Provided Dependencies ,版本之间的参考;

  • 因为是springboot 项目,考虑一下 springboot官网 给的依赖之间参考

  • 若是前面都无法提供参考,建议从 maven提供的最新依赖 开始尝试更换

     

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/HongYu012/article/details/123870410

智能推荐

ASP.NET基础函数四:CBool(expression) 转换表达式为Boolean 型态-程序员宅基地

文章浏览阅读358次,点赞8次,收藏8次。如果表达式所计算的值非零,则 CBool函数返回 True;否则返回 False。下面的示例使用 CBool函数将一个表达式转成 Boolean类型。Check = CBool(A = B) 'Check设为 True。Check = CBool(A) 'Check设为 False。B =1 ' 初始化变量。A = 0 '定义变量。

【elasticsearch系列】双击elasticsearch.bat闪退,日志排查报错信息_elasticsearch my-application-2023-03-26-1.log.gz-程序员宅基地

文章浏览阅读1.9k次。打开my-application.log日志文件,寻找报错信息,如下:[1] bootstrap checks failed[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured看提示._elasticsearch my-application-2023-03-26-1.log.gz

拯救OOM!字节自研 Android 虚拟机内存管理优化黑科技 mSponge-程序员宅基地

文章浏览阅读712次,点赞19次,收藏30次。为了便于更好地理解,我们将整个方案分为 2 个部分进行介绍。一期方案:主要介绍在 Java 大对象通过 LargeObjectSpace 的内存申请和释放过程中,如何在内存申请和释放过程对其进行改造,以脱离虚拟机对这些对象的内存管理,最后实现 LargeObjectSpace 占用的内存完全脱离虚拟机内存统计。二期方案:针对一期方案需要在应用运行过程中提前开启,但是线上 99%以上运行过程中可能不会发生 OOM,因此一期方案对系统的侵入有点高。

atitit.解决net.sf.json.JSONException There is a cycle in the hierarchy-程序员宅基地

文章浏览阅读48次。atitit.解决net.sf.json.JSONExceptionThereisacycleinthehierarchy1.环境:使用hibernate4跟个,,要不个哪的对象系列化成个json的时候儿有这个问题了... 12.原因::hb默认的lazy方式造成的当有关联对象的时候儿... 13.#---解决::lazy=fal...

ESP8266和ESP32区别,以及优缺点分析!_esp8266为什么不建议使用-程序员宅基地

文章浏览阅读3.4k次,点赞3次,收藏4次。高速主频240MHZ,对比STM32F1的72MHZ和STM32F4的168MHZ,速度快很多,而且价格上比起一直在涨价的STM系低出非常多;总的来说,STM32在国内的使用程度和受众程度是远大于ESP32的,毕竟STM32已经占据主流市场很久了,学习的资料比起ESP32起来会多,再加上一些开源问题,使用32的人群还是占据多数。2016年,乐鑫推出了ESP32,它是ESP8266的升级版本,速度更快还带有蓝牙4.2和蓝牙低功耗,价格在20元左右,在这个价格下几乎找不到对手可以“一战”。_esp8266为什么不建议使用

linux 分区简介,Linux硬盘分区知识简介-程序员宅基地

文章浏览阅读990次。Linux系统可以挂载多个不同接口类型的磁盘(disk),每一个磁盘又可以分成若干个分区(Partition),每个分区又可以拥有自己的文件系统类型(FileSystem)。Linux对于磁盘和分区又自己的一套标记方法。硬盘和分区的区分第一个SCSI(Small Computer System Interface)磁盘记为/dev/sda,第二个SCSI磁盘记为/dev/sdb;第一个SATA磁盘..._linux引导分区的标记可为

随便推点

在页面中添加两个 <select> 标签,用来显示年份和月份;同时添加两个 <ul> 标签,一个用来显示星期,另一个用来显示日期 在 JavaScript 脚本中动态添加年份和月份,获取当前日期的年份_javascript select填充月份-程序员宅基地

文章浏览阅读4.3k次,点赞3次,收藏6次。查看本章节查看作业目录需求说明:使用 JavaScript 中的 Date 对象,在页面上显示一个万年历。选择不同的年份和月份,在页面中显示当前月的日历实现思路:在页面中添加两个 <select> 标签,用来显示年份和月份;同时添加两个 <ul> 标签,一个用来显示星期,另一个用来显示日期在 JavaScript 脚本中动态添加年份和月份,获取当前日期的年份和月份,显示到 <select> 标签上根据 <select> 标签上显_javascript select填充月份

九度OJ 1174 查找第K小数 (STL)_oj 第k小整数 c++-程序员宅基地

文章浏览阅读2.4k次。题目1174:查找第K小数时间限制:1 秒内存限制:32 兆特殊判题:否提交:5161解决:2081题目描述:查找一个数组的第K小的数,注意同样大小算一样大。 如 2 1 3 4 5 2 第三小数为3。输入:输入有多组数据。每组输入n,然后输入n个整数(1输出:输出第k小的整数_oj 第k小整数 c++

阻容感基础10:电感器分类(1)-片式电感器_亨特h-程序员宅基地

文章浏览阅读814次,点赞3次,收藏4次。我们接触到的电感器是各种各样的:有绕着圈圈的,有贴片的(0805/0603/0402/0201),还有一些是四四方方的。那么这些电感有什么差别呢?本章我们来一起看贴片电感器和磁珠,我们大多只知道磁珠是耗能元件而电感是储能元件,从原理上为什么会是这样的效果呢?它们在结构上有差别么?ps:“暗物质”看不见摸不着,据说每秒钟有几吨的暗物质穿过我们的身体,那我们是怎么知道暗物质这玩意存在的呢?_亨特h

微信扫码下载APK遮罩提示示例-程序员宅基地

文章浏览阅读259次。由于微信的限制,应用文件在内置浏览器中下载全部被屏蔽掉,造成很多人用微信扫描二维码下载时,界面显示一片空白,容易误导以为在下载呢。按照当前主流习惯,做一个提示用户在浏览器中打开下载的遮罩。网上很多现成的例子,解释的也很详细,但感觉没有直接上手可用的例子,因此,我打算写个示例。<!DOCTYPE html><html><head><met..._微信扫码下载apk遮罩提示

解决Windows 11系统C盘爆满:Docker 桌面版日志文件的疑难杂症_appdata\local\docker\log\host-程序员宅基地

文章浏览阅读4.5k次,点赞7次,收藏10次。通过上述方法,您不仅可以解决因Docker日志文件导致的C盘空间爆满问题,还可以应用这一技巧,管理系统中的任何其他大文件或文件夹。保持C盘的清爽,让您的Windows系统运行更加流畅!_appdata\local\docker\log\host

异步上传引出的血案..-程序员宅基地

文章浏览阅读54次。首先想到的是 js插件 ajaxSubmitForm1. http://www.cnblogs.com/DylanZ/p/6019611.html 1 function ajaxSubmitForm() { 2     var option = { 3    url : '${pageContext.request.contextPath}/userCo..._clientcallmode

推荐文章

热门文章

相关标签