加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – JVM类Loader无法从扩展类路径加载自定义jar

发布时间:2020-12-15 02:15:55 所属栏目:Java 来源:网络整理
导读:我正在研究jvm类加载过程,并且知道以下事实: 类加载器子系统使用委托层次结构算法 它将按顺序从BootStrap路径搜索 – 扩展路径 – 应用程序路径. 然后我想在实际代码中“尝试”这个,如下所示: 创建一个A类和B类; A类使用main()方法和B类变量. 编译之后,我
我正在研究jvm类加载过程,并且知道以下事实:

类加载器子系统使用委托层次结构算法
它将按顺序从BootStrap路径搜索 – >扩展路径 – >应用程序路径.

然后我想在实际代码中“尝试”这个,如下所示:

创建一个A类和B类; A类使用main()方法和B类变量.

编译之后,我使用jar命令从B.class获取B类的jar文件,然后删除B.class文件,将B.jar文件放到jdk / jre / lib / ext中
(因为oracle doc说extClassLoader不会在jdk / jre / lib / ext中搜索任何松散的类文件).

结果是ClassNotFoundException .so我的问题是:

1)jvm是否允许从BootStrap和Extension类路径加载用户的clasfile?

2)如果是这样,为什么使用委托层次算法加载它似乎导致效率低?

tks ….

解决方法

事情似乎有点奇怪.

经过几次ClassNotFoundException,我得到了java.lang.IllegalAccessError,它至少表明extclassloader试图访问我的类B.jar

因为我没有声明A类和B类的包,所以这可能是原因所以我只是在我的B类之前添加了一个公共修饰符,并且如上所述,最后ExtClassLoader与我的B.jar一起使用.

虽然仍然不知道为什么jvm第一次忽略我的jar文件然后再读它….似乎jvm保留了一个目录列表(BootStrap和Ext类路径),它不像我的计算机那样及时更新系统

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读