Replacement System Classloader for Classes In Jars containing Jars

怎甘沉沦 提交于 2019-12-17 07:29:56

问题


So far, the examples I have seen for custom ClassLoaders involve subclassing the URLClassLoader, and using that specific instance to load classes in resources.

I have tried in vain to look for alternative methods to replace the SystemClassLoader, so that my ClassLoader can be consulted for classes not located in the classpath.

I tried Thread.currentThread().setContextClassLoader, but it doesn't seem to work.

Is it even possible?


回答1:


Though this is an old question, there is indeed a way to replace the system ClassLoader. You might get more than you bargained for, however, with reflection.

        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

This should work on the Oracle JVM.




回答2:


Run JVM with java.system.class.loader property:

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


来源:https://stackoverflow.com/questions/5380275/replacement-system-classloader-for-classes-in-jars-containing-jars

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!