问题
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