Руководящие зависимости к нескольким версиям библиотеки в Java и Eclipse

В среде Eclipse у меня есть проект A. Имеет зависимости к проектам или библиотекам B и C. (не имеет значения, если они - проекты, или библиотеки) B имеет зависимость от LibX.v1, и C имеет зависимость к LibX.v2. Во время времени выполнения A будут нужны B.jar и C.jar. Также классам в B.jar будет нужен LibX.v1, и классам в C.jar будет нужен LibX.v2. Быть различными версиями той же библиотеки, LibX.v1 и LibX.v2 имеет те же классы, таким образом, возможно, что класс может быть загружен из неверной версии библиотеки во времени выполнения, доставив много неприятностей. Как я управляю подобными ситуациями?

Наилучшие пожелания Seref

7
задан mahonya 19 January 2010 в 17:50
поделиться

2 ответа

Действительно, вы этого не делаете. Большинство классов Java не дают никаких гарантий о том порядке, в котором будут загружены библиотеки, поэтому вам действительно нужно быть уверенным, чтобы не дублировать зависимости от вашей классы. Я бы проверил, может ли B или C можно обновить до более новой версии, или если SIBX полностью совместима с обратной стороной.

Редактировать : На самом деле я нашел что-то, что может помочь вам. Это называется OSGI, и я не использовал его, но кажется, что это может сделать то, что вы пытаетесь сделать. Вот ссылка в интро.

4
ответ дан 7 December 2019 в 05:23
поделиться

Вам необходимо использовать механизм «несколько классов классов» (который является то, что OSGI способен на). В таком сценарии классный загрузчик для класса B может видеть только libx.v1, в то время как ClassLoader C видит только libx.v2. Вы можете сделать это с ОСГИ, но ОСГИ гораздо больше, чем это, и это не тривиально начать.

Другой плагин в рамках JPF , который также предлагает больше, чем просто используя несколько классов. Я думаю, что они оба используют принцип 1 классного загрузчика на плагин (модуль, что угодно, ...)

Может быть, посмотрите на классы . Я думаю, что можно сделать это с этой библиотекой. Преимущество заключается в том, что оно сосредоточено на аспекте классов. Документация не так хороша. Classworlds использует понятие царств класса. Посмотрите на пример использования API на сайте. Я добавлю пример здесь, если найду один. в любом случае, нет тривиального решения для этого я думаю

Решение его управлением зависимостями является лучшее решение, конечно, но не всегда возможно.

4
ответ дан 7 December 2019 в 05:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: