gpt4 book ai didi

java - 为什么我不能加载附加到引导类加载器搜索的资源?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:22:45 32 4
gpt4 key购买 nike

当通过 java.lang.instrument.Instrumentation#appendToBootstrapClassLoaderSearch 将 jar 添加到引导类加载器时,我无法通过

加载它的任何资源
ClassLoader.getSystemClassLoader().getResource("org/example/ClassInBootstrapJar.class")

但是,ClassLoader#loadClass 按预期工作:

ClassLoader.getSystemClassLoader().loadClass("org.example.ClassInBootstrapJar")

问题似乎是通过这种方式添加到引导类加载器的 jar 没有添加到 java.lang.ClassLoader#getBootstrapClassPath,所以 java.lang.ClassLoader#getBootstrapResource 在添加的jar中找不到资源(这里指的是Java 8)。

当通过 javaagent 的 META-INF/MANIFEST.MF 文件中的 Boot-Class-Path: my-bootstrap.jar 条目添加 jar 时,ClassLoader#getResource 也按预期工作。

为什么 java.lang.instrument.Instrumentation#appendToBootstrapClassLoaderSearch 的行为在这里有所不同,有没有办法让 getResource 与它一起工作?

最佳答案

前几天我遇到了同样的问题。看起来 appendToBootstrapClassLoaderSearch() 不会更新引导类路径属性 (sun.boot.class.path),而 BootClassLoader 资源搜索是基于此属性的。

http://hg.openjdk.java.net/jdk7u/jdk7u/jdk/file/70e3553d9d6e/src/share/classes/sun/misc/Launcher.java

因此查找失败。对我来说是缺陷

关于java - 为什么我不能加载附加到引导类加载器搜索的资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51347432/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com