查询某个类是在哪个JAR的什么版本开始出现的方法
背景
我们在依赖第三方JAR时,同时也会间接的依赖第三方JAR引用的依赖,而当我们项目中某个依赖的版本与第三方JAR依赖的版本不一致时,可能会导致第三方JAR的在运行时无法找到某些方法或类,从而无法正常使用。
如我正在开发的一个sdk.jar,其中会使用OpenFeign来进行HTTP通信,现在的项目一般来说都是通过依赖 spring-cloud-openfeign-core,并标注 @FeignClient 注解来实现,但是此项目却不能依赖 spring-cloud-openfeign-core。原因是我们公司有大量的老项目,使用的Spring版本比较老如Spring4,或是有的项目并没有使用Spring Boot。所以在设计之初时,为了兼容老项目,并且尽可能轻量,就设计成了sdk.jar不去依赖Spring Boot以及Spring Cloud,所以只能使用更加底层的io.github.openfeign:feign-core,通过Feign.Builder创建各FeignClient。
其中如果要让Feign识别SpringMVC的各种注解,需要为其指定Contract,使用 spring-cloud-openfeign-core 时可以指定 SpringMvcContract,而使用 io.github.openfeign:feign-core 则需要指定 SpringContract,该类是在 io.github.openfeign:feign-spring4 中定义的。
一切看似正常,直到有一个项目使用sdk后在发起HTTP请求时抛出异常
Caused by: java.lang.NoClassDefFoundError: feign/DeclarativeContractat java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_202]at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[na:1.8.0_202]at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
检查了下,该类是 SpringContract继承的父类。我们sdk.jar中openfeign版本是10.12,而对方项目中本身依赖了 spring-cloud-openfeign-core:2.1.2.RELEASE,对应io.github.openfeign:feign-core的版本为10.2.3,而该版本下确实没有DeclarativeContract类的。
知道问题的所在,那么就需要让对方升级openfeign的版本,并且在我们的用户手册兼容性章节下做出说明,那么到底是从什么版本开始有这个类的呢。如果按照合规性来说,每个新类或新方法的出现应该标注@since注解的,好告知使用者是从什么版本开始新增的,比如
/*** @author beemo* @since 1.2.0*/
public class Test {
}
但是实际上标注的是少数,包括openfeign,所以并不能直接是从什么版本开始新增的。
这时候就需要通过查询网站进行查询了。
实践
search.maven.org
https://search.maven.org/https://search.maven.org/该网站是官方搜索网站,可以根据坐标、根据类或者根据checksum进行搜索,搜索格式如下
如在文章中最开始的例子中,我想搜索 DeclarativeContract 是从哪个版本中出现的,就可以在搜索框中输入如下搜索条件
可以看到,搜索结果有516条,翻页后发现有其他的jar中也包含同样的类,所以我们还需要再过滤一下,根据搜索格式说明增加过滤条件:
这次搜索只搜出了34条,这下我们可以回答前文的问题了,那就是至少升级到10.5.0版本才可以正常使用。
central.sonatype.com
Maven CentralOfficial search by the maintainers of Maven Central Repository.https://central.sonatype.com/此网站同样是官方的网站,并且界面更好看,搜索条件也更丰富,查询方式略有不同,如下所示
总结
借助上述的网站,我们可以既可以搜索某个类是在什么版本出现的,也可以当程序执行报ClassNotFound等异常时,搜索缺失的依赖是什么,还是比较方便的。
相关文章:
查询某个类是在哪个JAR的什么版本开始出现的方法
背景 我们在依赖第三方JAR时,同时也会间接的依赖第三方JAR引用的依赖,而当我们项目中某个依赖的版本与第三方JAR依赖的版本不一致时,可能会导致第三方JAR的在运行时无法找到某些方法或类,从而无法正常使用。 如我正在开发的一个…...
Linux本地搭建StackEdit Markdown编辑器结合内网穿透实现远程访问
文章目录 1. docker部署Stackedit2. 本地访问3. Linux 安装cpolar4. 配置Stackedit公网访问地址5. 公网远程访问Stackedit6. 固定Stackedit公网地址 StackEdit是一个受欢迎的Markdown编辑器,在GitHub上拥有20.7k Star!,它支持将Markdown笔记保…...
k8s中ConfigMap、Secret创建使用演示、配置文件存储介绍
目录 一.ConfigMap(cm) 1.适用场景 2.创建并验证configmap (1)以yaml配置文件创建configmap,验证变化是是否同步 (2)--from-file以目录或文件 3.如何使用configmap (1&#x…...
Linux服务器性能优化小结
文章目录 生产环境监测常见专业名词扫盲服务器平均负载服务器平均负载的定义如何判断平均负载值以及好坏情况如果依据平均负载来判断服务器当前状况系统平均负载和CPU使用率的区别 CPU上下文切换基本概念3种上下文切换进程上下文切换线程上下文切换中断上下文切换 查看上下文切…...
ELF文件结构
ELF文件结构 前文结尾说到编译器编译源代码后生成的文件叫做目标文件,而目标文件经过编译器链接之后得到的就是可执行文件。那么目标文件到底是什么?它和可执行文件又有什么区别?链接到底又做了什么呢?接下来,我们将探…...
【C++】有关string迭代器的几道OJ题详解
目录 一、字符串最后一个单词的长度 题目描述 完整代码 二、验证回文串 题目描述 完整代码 三、反转字符串 题目描述 完整代码 四、反转字符串中的单词 题目描述 完整代码 一、字符串最后一个单词的长度 原题链接 题目描述 计算字符串最后一个单词的长度ÿ…...
谷歌宣布向云计算客户开放 Gemini Pro,开发者可用其构建应用
12 月 14 日消息,美国时间周三,谷歌宣布了一系列升级的人工智能(AI)功能,旨在为其云计算客户提供更好的服务。这家科技巨头正试图赶上竞争对手,比如微软和 OpenAI,它们都在积极利用人工智能的热…...
软件测试用例经典方法 | 单元测试法案例
单元测试又称模块测试,是对软件设计的最小单元的功能、性能、接口和设计约束等的正确性进行检验,检查程序在语法、格式和逻辑上的错误,并验证程序是否符合规范,以发现单元内部可能存在的各种缺陷。 单元测试的对象是软件设计的最…...
Leetcode 2967. Minimum Cost to Make Array Equalindromic
Leetcode 2967. Minimum Cost to Make Array Equalindromic 1. 解题思路2. 代码实现 题目链接:2967. Minimum Cost to Make Array Equalindromic 1. 解题思路 这一题其实我的思路有点笨,多少有点暴力求解的意思。 显然,如果我们给出全部的…...
【数据结构】什么是堆?
🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 堆的概念及结构 堆的定义如下: n个元素的序列{k1,k2,...,kn}当且仅当满足以下关系时,称之为堆. 或 把这个序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个…...
生产环境_Spark处理轨迹中跨越本初子午线的经度列
使用spark处理数据集,解决gis轨迹点在地图上跨本初子午线的问题,这个问题很复杂,先补充一版我写的 import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.sql.{Row, SparkSession} import org.apache.spark.sql.func…...
Vue前端与后端放在一起的搭建方式
1.首先把后端项目搭建好 去到项目的存放位置 2.然后cmd黑窗口输入命令创建vue项目 3.创建成功后回到后端项目进行合并 3.1在File处选择Project Structure 3.2选择模块 3.3找到自己的vue项目 3.4疯狂next最后create 3.5选择Apply并确定OK,恭喜您创建成功了 二、启动…...
SI24R03国产自主可控RISC-V架构MCU低功耗2.4GHz收发芯片SoC
目录 RISC-V架构的优势SI24R03/04特性射频收发器模块特征MCU 模块特征 其他特征 RISC-V架构的优势 相对于目前主流的英特尔X86架构及ARM等架构来说,RISC-V架构具有指令精简、模块化、可扩展、开源、免费等优点。RISC-V的基础指令集只有40多条,加上其他基…...
基于FPGA的温度控制系统设计(论文+源码)
1.系统设计 本次基于FPGA的智能温度控制系统,以FPGA为控制核心,采用自顶向下的设计方法,按照模块化设计的思路分别实现各个模块,再加以整合实现整个系统,从而达到了温度控制的目的。系统以水箱为被控对象,…...
C语言训练:三个字符串比较大小,实现两个整数数的交换统计二进制中1的个数
目录 一、编写程序,输入三个字符串,比较它们的大小,并将它们按由小到大的顺序输出。要求用函数、指针实现。要求:要采用函数调用,并用指向函数的指针作为函数的参数。 1.不使用函数指针作为参数,并自己模拟strcmp。 …...
module ‘tensorflow‘ has no attribute XXX 报错解决
问题描述: 粘了别人的tensorflow项目,运行总是报错module ‘tensorflow’ has no attribute什么什么 问题解决: 导入tensorflow的代码如下 import tensorflow as tf此时,某个某块报错,比如下面这个 那么就直接把tf.…...
MySQL数据库 DDL
目录 一、DDL 二、操作数据库 三、操作表 四、数据类型 五、表操作案例 六、修改表 七、删除表 一、DDL Data Definition Language,数据定义语言,用来定义数据库对象(数据库,表,字段) 。 二、操作数据库 (1&am…...
力扣二叉树--总结篇(2)
前言 总体回顾:11.18-12.14,中间有一个星期左右因为考试没有写题。37道题。 内容 这是第二阶段刷的题 从路径到构造二叉树,合并二叉树,再到二叉搜索树,公共祖先问题 看到二叉树,看到递归 都会想&#…...
小米移动端页面练习---重点:导航栏点击下箭头内容的切换以及样式,高亮显示的实现
效果图 1.html <div><header><div class"header-ad"><img src"./images/ad.png" alt"" srcset""></div><div class"header-two-section"><div class"logo"><div c…...
从零开始创建一个项目,springBoot+mybatisPlus+mysql+swagger+maven
一,前提 从零开始创建一个项目,绑定了数据库 用到的技术栈:springBootmybatisPlusmysqlswaggermaven 二,创建项目步骤 1,创建项目 创建出来的项目结构如图所示 2,修改配置文件 因为我比较习惯yml语言&…...
【视点合成】代码解读:生成demo视频
变换工具 def render_3dphoto(src_imgs, # 输入的源图像,维度为 [batch_size, 3, height, width]mpi_all_src, # 输入的所有源图像的MPI,维度为 [batch_size, num_planes, 4, height, width]disparity_all_src, # 所有源图像的视差信息&…...
Process On在线绘制流程图
目录 一.ProcessOn 1.1.介绍 1.2.直接网上使用 二.绘制门诊流程图 三.绘制住院流程图 四.绘制药库采购入库流程图 五.绘制OA会议流程图 今天就到这里了哦!!!希望能帮到你哦!!! 一.ProcessOn 1.1.介绍 ProcessOn(流程&#…...
【Hadoop-OBS-Hive】利用华为云存储对象 OBS 作为两个集群的中间栈 load 文件到 Hive
【Hadoop-OBS-Hive】利用华为云存储对象 OBS 作为两个集群的中间栈 load 文件到 Hive 1)压缩文件2)上传文件到 OBS 存储对象3)crontab 定时压缩上传4)从 obs 上拉取下来文件后解压缩5)判断对应文件是否存在6࿰…...
直线检测算子
hough_lines_dir 接口 hough_lines_dir(ImageDir : HoughImage, Lines : DirectionUncertainty, AngleResolution, Smoothing, FilterSize, Threshold, AngleGap, DistGap, GenLines : Angle, Dist) 参数 in: ImageDir :由边缘检测算子sobel_dir、edge_image获取的…...
如何在本地Docker中部署MinIO服务并实现远程访问管理界面
文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器,可以在各种环境中运行,例如本地、Docker容器、Kubernetes集群等。它兼…...
逛商场。。。
题目名字 逛商场 题意 见到想买的物品,只要能买得起,就一定会买下来之后才会继续往前走;如果买不起就直接跳过 思路 接着,它读取数组 aa 的值,并存储在数组中。然后,程序读取一个整数 m。初始化计数器 cn…...
RTrPPG
研究背景 心率 (HR) 和脉搏率变异性 (PRV) 是允许分析心脏行为的两个生理参数。心率监测可以通过接触式和非接触式的两种方法进行。通常用于测量 HR 和 PRV 的两种接触式技术是心电图 (ECG) 和光电容积脉搏波 (PPG)。 ECG 测量由心脏活动引起的电场。另一方面,PPG …...
web应用开发技术的一些概念
一、Servlet 1.Servlet的工作过程: Servelt的工作流程示意图 (1)客户端发起一个Http请求到服务器,请求特定的资源或者是要执行特定的操作 (2)服务器在接收到请求后,根据请求相应的URL将请求分发…...
智能优化算法应用:基于乌燕鸥算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于乌燕鸥算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于乌燕鸥算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.乌燕鸥算法4.实验参数设定5.算法结果6.参考文…...
超聚变服务器(原华为服务器)网站模拟器
一、超聚变服务器(原华为服务器)网站模拟器: 原来了解服务器可以从他的网站上进行了解,模拟器做的很好了。 https://support.xfusion.com/server-simulators/ 有很多的模拟器,今天主要看下BMC的设置 有很多的在线工具…...
肇庆企业免费建站/百度精准营销获客平台
总结python的基本语法、程序结构、函数和模块学到的知识点,一、python基本语法1 ’数据类型:,整数int、浮点数float、复数、字符串、逻辑值等。比如,逻辑值仅包括True/False,是用来在if/while等语句做判断的2.变量&…...
做外贸的网站有那些/成都网络营销推广公司
小编典典您也可以尝试这种方式。我已经尝试和测试过了。步骤2:将/libs其添加到项目的文件夹,然后添加到构建路径。步骤3:然后按以下方式使用进口寻找import org.json.JSONException;import org.json.JSONObject;import org.json.XML;样品串St…...
wordpress html标签可以/seo排名点击软件推荐
问题描述 springboot项目在service层的业务逻辑用Transactional(rollbackFor Exception.class)注解来标明事务,结果程序报异常之后,数据依然修改成功了。。。 原因分析 因为在这块处理中,用try...catch...进行了异常的捕获,而…...
单位做网站注意什么问题/公司怎么在百度上推广
分派(Dispatch)可能是静态也可能是动态的,根据分派依据的宗量数可分为单分派和多分派。这两种分派方式的两两组合就构成了静态单分派,静态多分派,动态单分派,动态多分派这4种组合。本章讲静态分派。1、静态分派所有依赖静态类型来…...
买个域名后怎么做网站/seo的研究对象
django后台管理详解,admin,模型管理器类,Meta类什么是admin 后台管理admin配置步骤注册自定义模型类修改自定义模型类的数据样式模型管理器类语法使用字段控制效果Meta类友情链接什么是admin 后台管理 Django提供比较完善的后台管理数据库的接口,可供开发过程中调用…...
港澳做愛网站/网络营销推广活动
题目链接: HDU-6092 大意: 有两个串 Ai和 Bi长度分别为 n和 m+1 对于集合 A1,2...n的子集 有2n个,这些每个子集和为 S,对应一个 Bs 现在给出 Bi的序列,求 Ai,若答案有多组,输出字典序最小的一组。 思…...