выбрать другую банку во время выполнения - переключение

Мне было интересно, есть ли способ выбрать разные версии одной и той же банки во время выполнения. Я надеюсь избежать использования профилей maven, так как это будет выбор во время сборки.

Допустим, есть две версии одной и той же банки:

greatFeature_version_A.jar greatFeature_version_B.jar

Моя первоначальная идея состояла в том, чтобы использовать JMX для создания базового переключателя времени выполнения, выбирающего между этими двумя банками, которые оба включены в путь к классам. Кроме того, содержимое двух банок одинаково (без версий или разных имен внутренних классов).

Поэтому, когда запрашивается класс, скажем, из версии_A, загрузчик классов всегда будет выбирать первый найденный, независимо от того, к какой банке он принадлежит.

Я думаю, что таким образом невозможно добиться эффективного переключения во время выполнения. Мне было интересно, может ли кто-нибудь испытать что-то подобное и порекомендовать обходной путь. Я также надеюсь избежать написания собственного загрузчика классов, если это возможно.

Большое спасибо!

P.S. Другие связанные вопросы по SO указывают на пользовательские загрузчики классов, например this один.


person denchr    schedule 27.03.2011    source источник


Ответы (1)


Вы можете использовать jarjar для «переименования» пакетов, чтобы пакеты greatFeature_version_A.jar начинались как ajar.*, а другие запускались как bjar.* Таким образом, вы можете использовать код из обоих jar-файлов в одном приложении, потенциально одновременно.

person Peter Lawrey    schedule 27.03.2011