Сменный системный загрузчик классов для классов в банках, содержащих банки - PullRequest
14 голосов
/ 21 марта 2011

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

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

Я пытался Thread.currentThread().setContextClassLoader, но, похоже, он не работает.

Это вообще возможно?

Ответы [ 2 ]

12 голосов
/ 02 октября 2013

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

10 голосов
/ 21 марта 2011

Запустить JVM с java.system.class.loader свойством:

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