Как я могу позволить разным версиям API JAVA работать вместе? - PullRequest
0 голосов
/ 19 января 2010

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

Спасибо

Джефф Чжан

Ответы [ 3 ]

3 голосов
/ 19 января 2010

Ваша лучшая ставка - OSGi . Также см. Этот Учебник в качестве отправной точки.

1 голос
/ 19 января 2010

Самый простой способ - использовать адаптеры в вашем коде (пакет для каждой поддерживаемой вами версии).

Если версии библиотеки совместимы с более старыми версиями, вы можете скомпилировать их с самыми новыми версиями (так работают драйверы JDBC, которые должны поддерживать версии 2, 3 и 4 JDBC с одним и тем же файлом драйвера), но если это не так, вам придется скомпилировать эти пакеты адаптеров отдельно (в зависимости от их версии библиотеки). Второй способ тоже безопаснее. Затем вы можете объединить двоичные файлы. Ваша фабрика позаботится о том, чтобы работал только правильный код.

После этого у вас будет фабрика, которая выясняет, какую версию библиотеки использовать (либо проверяя ее каким-либо образом, либо придется настраивать ее явно), и создает экземпляр соответствующего адаптера.

Обновление : Выше предполагается, что вы хотите создать файл JAR, который может работать с различными версиями другого файла JAR, но во время выполнения (в данной установке) будет только одна исправленная версия сторонней библиотеки. Если вам нужно поддерживать несколько версий одних и тех же классов в одной и той же JVM, вам действительно нужно взглянуть на OSGi.

0 голосов
/ 19 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...