java反射指定jar包加载, 该jar包所依赖的其他jar包ClassNotFound问题

在无法直接传递jar包和源码的情况下,通过模拟jar包和使用反射及自定义类加载器尝试解决A公司安全认证服务的对接。方案A中遇到方法找不到的问题,方案B解决了jar包本身找不到的问题但未处理其依赖。最终,方案C通过Class.forName成功解决类加载问题,确保所有依赖都得到满足。
摘要由CSDN通过智能技术生成

1.问题背景

我们需要对接A公司的安全认证服务,他们的jar不能传至外网,我们的源代码也不能拿到他们公司进行开发,由此引出了这个问题。

2.解决方案A

A公司发了接口文档及示例代码,我们本地根据A公司提供的示例代码复制包名,做了一个模拟jar包,思路是让本地的代码可以成功打包,去A公司部署的时候再替换上真实的jar包。最终报NoSuchMethod方法找不到,根据该方法分析可能是jar冲突导致或打包问题。于是使用反射指定jar包去开发。

3.解决方案B

// 指定类路径
File file = new File("C:\\Users\\DELL\\Desktop\\xxx-1.0.0.jar");
URL url = file.toURI().toURL();
// 创建类加载器
ClassLoader loader = new URLClassLoader(new URL[]{url});
// 加载指定类
Class<?> cls = loader.loadClass("com.xxx.xxx.Test");
结果: 使用指定反射jar的方式开发,放置服务器后指定的jar包可以找到,但指定jar包所依赖的其他jar无法找到。ClassNotFound

3.解决方案C

// 类加载
Class<?> cls = Class.forName("com.xxx.xxx.Test");
使用类加载方式成功解决。方案如下

反射问题原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值