福州建网站,第三方网站备案,wordpress数据库导出网址链接,怎么更改公司网站域名背景
我们在依赖第三方JAR时#xff0c;同时也会间接的依赖第三方JAR引用的依赖#xff0c;而当我们项目中某个依赖的版本与第三方JAR依赖的版本不一致时#xff0c;可能会导致第三方JAR的在运行时无法找到某些方法或类#xff0c;从而无法正常使用。
如我正在开发的一个…背景
我们在依赖第三方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等异常时搜索缺失的依赖是什么还是比较方便的。