包含 Jar 的 Jar 中的类的替换系统类装入器

2022-09-03 13:16:12

到目前为止,我看到的自定义类加载器示例涉及对 URLClassLoader 进行子类化,并使用该特定实例在资源中加载类。

我徒劳地试图寻找替代方法来替换SystemClassLoader,以便可以参考我的ClassLoader来查找不在类路径中的类。

我试过了,但它似乎不起作用。Thread.currentThread().setContextClassLoader

这有可能吗?


答案 1

虽然这是一个古老的问题,但确实有一种方法可以取代系统ClassLoader。然而,通过反思,你可能会得到比你讨价还价的更多的东西。

        Field scl = ClassLoader.class.getDeclaredField("scl"); // Get system class loader
        scl.setAccessible(true); // Set accessible
        scl.set(null, new YourClassLoader()); // Update it to your class loader

这应该适用于Oracle JVM。


答案 2

使用属性运行 JVM:java.system.class.loader

java -Djava.system.class.loader=myClassLoader myApplication

推荐