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

时间:2011-03-21 16:02:44

标签: java jar classloader

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

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

我尝试了Thread.currentThread().setContextClassLoader,但它似乎无效。

甚至可能吗?

2 个答案:

答案 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