Как упаковать и использовать существующую библиотеку Java с OSGI

После обращения за помощью для руководящих зависимостей от различных версий тех же библиотек в Java было предложено, чтобы я смотрел на реализации OSGI. Будучи под давлением крайнего срока, я мог действительно использовать некоторую справку, которая сохранит меня от рытья до бесконечных документов OSGI. У меня есть рабочее приложение, которое собирается использовать новую платформу. Платформа использует различные версии банок, которые я уже использую, таким образом, я хочу упаковать новую платформу как пакет OSGI. Я могу оставить свое приложение, как это, и используйте пакет OSGI только в качестве контейнера в JVM? Это означало бы, что я буду использовать пакет OSGI только для изоляции ряда классов от остальной части JVM для предотвращения конфликтов между различными версиями классов. другими словами, я хочу использовать OSGI, не неся весь мой код к OSGI базирующаяся установка.

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

7
задан mahonya 25 January 2010 в 01:23
поделиться

2 ответа

-

У меня нет полного ответа для вас здесь, я просто хотел противостоять тому, что детерб сказал:

Во-первых, вы должны иметь все свое приложение в рамках OSGI.

Это не правда. Другой подход будет встроить контейнер OSGI в приложение Host.

Сложная часть вот взаимодействие между внутренней частью ОСГИ и снаружи, потому что код живет на отдельных классовых загрузках.

Вы можете сделать ваши классы хоста видимыми к части OSGI, используя классную тратпу системы OSGI. Наобою вокруг сложнее.

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

Если у вас есть четкое разделение между хостом и OSGI, например, системой плагина, то это может работать довольно хорошо.

Находясь под давлением срока

, которое может быть проблемой. Существует много, чтобы учиться с ОСГИ, и так как оно практически во избежание удара в мейнстриме, все еще есть недостаток знаний сообщества, поддержка инструментов, совместимость библиотеки и так далее.

Самый большой вопрос, который вы должны спросить в тот момент: мне действительно нужно управлять разными версиями зависимостей во время выполнения? Если нет, то есть. Вы можете понять вещи во время развертывания (например, конфигурация), то может быть более простое решение для вас.

3
ответ дан 7 December 2019 в 16:42
поделиться

Во-первых, вы должны иметь все свое приложение в рамках OSGI. Тем не менее, я не думаю, что было бы трудно настроить его, чтобы вам приходилось только работать с несколькими пучками (возможно, только два, в зависимости от вашей настройки.

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

Другой путь будет упаковывать все библиотеки отдельно Используя соответствующие команды Wrap. Это имеет значительно больше потенциальных проблем, если вы не заинтересованы в полном объеме ОСГИ.

В зависимости от вашей настройки сборки я бы выглядел начну, посмотрев на Maven-Plugin и / или BND . Плагин Maven-зависимости делает его довольно легко, так как все, что вам нужно сделать, это сказать, какой артефактные идентификаторы встроили и это сделают. Вам нужно будет Убедитесь, что указываете все встроенные пакеты JAR в качестве частных пакетов.

Это должно работать, если рамка не выполняет класс LOA DING / AOP, который сделает его значительно сложнее оспортировать.

Наконец, если вы заинтересованы в быстром неразвитом , создают рамки с помощью Maven-Plugin и просто переименуют все пакеты для конфликтующих библиотек Отказ Это, вероятно, было бы самым простым, так как вы просто переупаковываете структуру с затененными библиотеками, а затем используете это как вашу зависимость.

0
ответ дан 7 December 2019 в 16:42
поделиться
Другие вопросы по тегам:

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