Как предотвратить загрузку класса из банки

Я пишу плагин для некоторых приложений. Предположим, что зависимость библиотеки приложения hava от libA-1.0 и моего плагина аналогична зависимости от libA-2.0. Они различаются по версиям и не совместимы друг с другом (т.е. имеют разные сигнатуры методов API).

Как запретить моему плагину загружать классы из libA-1.0 (или как заставить его использовать классы из libA.2.0)?

Есть ли способ сделать это не писать пользовательский загрузчик классов и не использовать forName, вызовы loadClassDefinition?

Подобная проблема возникает, когда вы помещаете некоторые библиотеки в архив *.war, и они не загружаются, потому что веб-контейнер содержит "одинаковые" библиотеки в classpath.

Спасибо за любую помощь.

С уважением, Павел

1 ответ

Решение

OSGI предоставляет эту функциональность из коробки. Я уверен, что есть некоторые другие плагины, которые предоставляют аналогичные функции.

Существует URLClassLoader, который должен обеспечивать множество функций загрузки классов из другого jar-файла. Вам придется приложить некоторые усилия, чтобы изменить загрузчик классов потоков, выполняющих эту работу. Не иметь под рукой примера, придется написать его, если вам нужен конкретный пример (если вы не можете найти его с помощью поисковой системы)

Другие вопросы по тегам