Classloader de sistema de reemplazo para clases en tarros que contienen tarros

Hasta ahora, los ejemplos que he visto para los ClassLoaders personalizados implican la subclasificación de URLClassLoader y el uso de esa instancia específica para cargar clases en los recursos.

Intenté en vano buscar métodos alternativos para reemplazar el SystemClassLoader, de modo que se pueda consultar mi ClassLoader para las clases que no se encuentran en el classpath.

Intenté Thread.currentThread().setContextClassLoader , pero parece que no funciona.

¿Es posible?

Aunque esta es una vieja pregunta, de hecho hay una manera de reemplazar el sistema ClassLoader. Sin embargo, es posible que obtengas más de lo que esperabas con reflexión.

  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 

Esto debería funcionar en Oracle JVM.

Ejecute JVM con la propiedad java.system.class.loader :

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