Загрузчик классов классов для классов в баночках, содержащих банки

До сих пор примеры, которые я видел для пользовательских ClassLoaders, включают в себя подклассу URLClassLoader и использование этого конкретного экземпляра для загрузки классов в ресурсы.

Я тщетно пытался найти альтернативные методы для замены SystemClassLoader, поэтому с моим ClassLoader можно ознакомиться для классов, не расположенных в пути к классам.

Я попробовал Thread.currentThread().setContextClassLoader, но он не работает.

Возможно ли это?

Ответ 1

Хотя это старый вопрос, действительно есть способ заменить систему 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

Это должно работать на JVM Oracle.

Ответ 2

Запустите JVM с java.system.class.loader:

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