记一次诡异的Cannot find declaration to go to,Cannot resolve method

news2024/10/5 1:18:19

记一次诡异的 Cannot find declaration to go to,
Cannot resolve method 'getOnExpressions' in 'Join'

对于项目中通常问题,清除缓存,重启idea,或者仔细检查语法通常都能解决问题,但是这次却失效了,以下是原因及解决方案。

项目中使用了mybatisplus的多租户拦截器,但是在拦截sql的时候却报jsqlparse解析错误,而且仅仅是部分sql报错,并非全部sql报错,很容易让人怀疑是自己业务方法有问题,检查无法找到问题,一度怀疑sql解析器不够强大,不支持自定义的特殊sql,但是项目sql又是简单的join连接并且仅仅取了个别名,解析器难道如此拉胯?当然后来阅读sql解析器源码发现其功能异常强大,这是后话;

点击进去mybatis-plus的多租户源码中,发现调用jsqlparser的一行报错,仔细检查业务,并未发现问题,

点进去报错的jsqlr源码中发现该行提示 Cannot find declaration to go to,
Cannot resolve method 'getOnExpressions' in 'Join',非常奇怪源码中怎么会有这样的提示?

这里是mybatis-plus的多租户源码,怎么会提示找不到jsqlparser呢?但是点进去调用的类中明明能够看到调用的方法却找不到,

可以看到源码中这两行是标红的,但是点进去join后明明却又可以看到getOnExpression()方法

细心的你可能会发现少了个s,

于是清除缓存,重启idea,仍旧无济于事;

后猜想可能是jsqlparse不够强大,不支持自定义sql,但是debug后发现jsqlparse超乎想象的强大;

最后猜想可能是jar包冲突,而实际原因也确实是jar冲突,以下是排查思路:

1)找到join所在jar包,同时找到TenantLineInnerInterceptor所在jar包,发现如下两个:

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>


<dependency>
            <groupId>com.github.jsqlparser</groupId>
            <artifactId>jsqlparser</artifactId>
            <version>4.0</version>
        </dependency>

于是猜想通常官方starter会做版本仲裁,可能该starter中已经包含了jsqlparser的jar包了,于是点进去果然发现了4.3版本的jar包,但是项目中却又引入了4.0版本的,所以果断将4.0的删除,发现原来提示Cannot find declaration to go to,
Cannot resolve method 'getOnExpressions' in 'Join'   的地方已经恢复了正常;

2)对于项目中其它引用4.0的代码切换为4.3的,并且重写部分报错的业务,至此完美解决;从这里也能看到是因为版本差异导致的

后记:对于项目中其它所有有版本冲突的地方,都可以采用此方法来进行仲裁排除;

适当阅读源码,debug源码,受益匪浅。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/989831.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

移动app、接口、web自动化测试区别

先说说WEB的UI自动化测试&#xff1a;很多人在说自动化测试的时候&#xff0c;基本上现在指的是WEB的UI自动化测试&#xff0c;但其实这是不对的&#xff0c;自动化测试包含了很多开发的技术&#xff0c;不只是界面上的自动化测试。WEB的UI自动化测试只是其中的一种&#xff0c…

统一潮流控制器 (UPFC) 的应用,以增强电力系统中的电压稳定性(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

JavaScript事件处理

表单事件 表单事件在HTML表单中触发 (适用于所有 HTML 元素&#xff0c;但该HTML元素需在form表单内)&#xff1a; 案例演示1&#xff1a;当文本框获取焦点&#xff0c;文本框背景为红色&#xff0c;当文本框失去焦点&#xff0c;文本框背景为黄色 <!DOCTYPE html> <…

双翌保养码使用指南方法(一)

保养码使用指南一 为了确保软件的正常运行和有效使用&#xff0c;正确地使用保养码是至关重要的。以下是保养码使用的简单指南&#xff0c;以帮助您进行正确的操作。 1. 打开软件入口&#xff1a;首先&#xff0c;在您的电脑上打开文件夹&#xff0c;并找到s-y softactive tool…

每日一题 2651. 计算列车到站时间

难度&#xff1a;简单 不多说 class Solution:def findDelayedArrivalTime(self, arrivalTime: int, delayedTime: int) -> int:return (arrivalTime delayedTime) % 24

代码签名中的时间戳是什么?时间戳是干什么的?

我们在了解代码签名相关的内容时&#xff0c;会看到其拥有“支持时间戳&#xff0c;确保签名代码长期有效”的作用&#xff0c;那么代码签名中的时间戳是什么?时间戳是干什么的呢?看完本篇内容&#xff0c;你会找到答案。 什么是时间戳? 时间戳&#xff08;英文Time Stamp&a…

第P4周:猴痘病识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;Pytorch实战 | 第P4周&#xff1a;猴痘病识别&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 一、前期准备 1.设置GPU 设置GPU device torch.device…

mysql drop table 死锁

1.场景 mysql出现大量的drop table阻塞操作 2.从会话表 processlist 里面和事务表INNODB_TRX里面并找不到正在占用锁的会话和事务 3.分析锁信息&#xff1a; INNODB_LOCKs 和INNODB_LOCK_waits 4.有问题的查询&#xff1a;可能会导致整个db的阻塞吗&#xff1f; | 2576901 | …

基于AERMOD模型在大气环境影响评价中的实践技术应用

随着我国经济快速发展&#xff0c;我国面临着日益严重的大气污染问题。近年来&#xff0c;严重的大气污染问题已经明显影响国计民生&#xff0c;引起政府、学界和人们越来越多的关注。大气污染是工农业生产、生活、交通、城市化等方面人为活动的综合结果&#xff0c;同时气象因…

Windows 12 开源网页版

前言 Windows 12 网页版是一个开源项目,使用标准网络技术,例如 Html、CSS 和 Javascript, 希望让用户在网络上预先体验 Windows 12 Windows 12 网页版download Windows 12 网页版 gitlab项目Windows 12 网页版 download参考download 开始菜单 ​ 功能 ​

tab切换,左右加箭头,点击箭头实现tab切换

和正常tab切换一样原理&#xff0c;点击箭头多了步计算 <template><div><div class"tab-container"><p>{{projectName}}</p><div class"banner"><div v-for"(tab, index) in tabs" :key"index&quo…

完整的神经网络模型训练步骤——以CIFAR10数据集为例(pytorch版本)

完整步骤 准备数据集 DataLoader加载数据集 搭建网络模型 创建网络模型实例 定义损失函数 定义优化器 设置网络训练参数 开始训练 验证模型 保存模型 训练结果可视化&#xff08;使用tensorboard完成&#xff09; 数据集介绍 CIFAR10 是由 Hinton 的学生 Alex Krizhevsky、Il…

使用dockerfile文件部署Python+PyWebIO项目

1、安装docker 教程详见之前的内容。https://blog.csdn.net/weixin_44691253/category_12101661.html 2、打包好Python项目 之前的文章中有提到我编写测试工具使用的框架&#xff1a;PythonRequestsPyWebIO框架详解&#xff0c;编写测试工具提高团队测试效率 打包项目时&am…

LlamaIndex:将个人数据添加到LLM

推荐&#xff1a;使用 NSDT场景编辑器 快速搭建3D应用场景 LlamaIndex是基于大型语言模型&#xff08;LLM&#xff09;的应用程序的数据框架。像 GPT-4 这样的 LLM 是在大量公共数据集上预先训练的&#xff0c;允许开箱即用的令人难以置信的自然语言处理能力。但是&#xff0c;…

Ei、Scopus双检索 | 2024年第三届人工智能与机器学习前沿国际会议(FAIML 2024)

会议简介 Brief Introduction 2024年第三届人工智能与机器学习前沿国际会议(FAIML 2024) 会议时间&#xff1a;2024年4月26日-28日 召开地点&#xff1a;中国宜昌 大会官网&#xff1a;www.faiml.org FAIML 2024将围绕“人工智能与机器学习”的最新研究领域而展开&#xff0c;为…

扫地僧静态站群:神马SEO养权重站,快速出收录/权重

扫地僧静态站群:神马SEO养权重站,快速出收录/权重神马搜索权重需要慢养耐心 技巧也需要 百分百出权重率也不是梦图中权重为【站长工具】与爱站结果差距较大

Multimodal Video Pre-trainin

视频领域的多模态预训练工作近年来逐渐兴起。多模态模型通常融合了图像、视频、文本等多类特征&#xff0c;性能优于单模态模型。预训练模型通常以自监督的方式在大批量数据集上进行训练&#xff0c;而后服务于下游任务。本文梳理了近年来视频多模态预训练领域的相关工作&#…

Redis多机数据库实现

Redis多机数据库实现 为《Redis设计与实现》笔记 复制 客户端可以使用SLAVEOF命令将指定服务器设置为该服务器的主服务器 127.0.0.1:12345> SLAVEOF 127.0.0.1 6379127.0.0.1:6379将被设置为127.0.0.1:123456的主服务器 旧版复制功能的实现 Redis的复制功能分为同步&a…

扫地僧静态养站王站群:搜狗SEO站群收录养站效果

扫地僧静态养站王站群:Sogou搜狗SEO出站及收录效果,扫地僧静态站群采用了静态生成式的方式&#xff0c;只需要一个后台管理系统即可管理多个网站&#xff0c;大大提高了建站效率。建站大概45天左右&#xff0c;收录率百分之三十至百分之五十左右 如果对购买的域名进行把控&…

Spring系列文章1:Spring入门程序

一、什么是spring 一个java框架、java语言开发&#xff0c;轻量级、开源框架、在j2se、j2ee中都可以使用。它是一个管理对象的容器&#xff0c;Spring 容器不装文本&#xff0c;数字。装的是java对象。 核心技术&#xff1a;ioc、aop 官网地址 https://spring.io 项目列表…