到目前为止,我看到的自定义ClassLoader的示例涉及子类化URLClassLoader,并使用该特定实例来加载资源中的类。
我徒劳地试图寻找替换SystemClassLoader的替代方法,以便可以为不在类路径中的类查询我的ClassLoader。
我尝试了Thread.currentThread().setContextClassLoader
,但它似乎无效。
甚至可能吗?
答案 0 :(得分:12)
虽然这是一个老问题,但确实有一种方法可以替换系统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。
答案 1 :(得分:10)
使用java.system.class.loader
属性运行JVM:
java -Djava.system.class.loader=myClassLoader myApplication