包含Jars的Jars中的类的替换系统类加载器

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

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

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

它甚至可能吗?

虽然这是一个老问题,但确实有一种方法可以替换系统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。

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

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