OSGI – обработка сторонних JAR, требуемых пакетом

Я только начинаю разработку OSGI и изо всех сил пытаюсь понять, как лучше обращаться с зависимыми JAR.

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

Я понимаю, что один из вариантов – превратить эти JAR в пакеты, а также развернуть их в контейнер OSGI. Однако, если их нужно использовать только одним пучком, это не кажется идеальным.

Какое это лучшее решение? Могут ли JAR быть встроены в JAR пакета и если это разумный подход?

Я почти всегда собирал каждую банку отдельно. Сам OSGi предназначен для модуляции, и вы принимаете всю систему ad absurdum, не делая этого.

Если вы хотите конвертировать JAR в пакеты, вы можете использовать инструмент BND, написанный Peter Kriens . Но сначала я бы предложил вам найти пакет в SpringSource Enterprise Bundle Repository, если они еще не сделали эту работу для вас.

Вы можете включить стороннюю банку внутри вашего пакета, добавив стороннюю банку в корневой каталог файла jar bundle, а затем добавив заголовок classа пакетов в манифест узла, например:

Bundle-ClassPath: .,my3rdparty.jar 

Если вы хотите разместить стороннюю банку в подкаталоге, укажите путь без использования заголовка ./ , например

 Bundle-ClassPath: .,lib/my3rdparty.jar # (not ./lib/my3rdparty.jar) 

Встраивание зависимостей, отличных от OSGi, можно связать.

Легкий способ сделать это – использовать Maven для управления вашими зависимостями и Maven Bundle Plugin для создания вашего пакета. Взгляните на инструкции и плагина Maven Bundle, описанные в разделе Вложения зависимостей страницы документации подключаемого модуля.

Как отметил Роланд, это не идеальное решение в отношении намерений OSGi, то есть модуляции и повторного использования отдельных модhive. Однако это может быть прагматичным решением на время, пока зависимые от сторонних сторон не могут быть преобразованы в пакеты OSGi.

Этот stream немного устарел, но я хотел бы указать на одно из ограничений вложений зависимостей. Напомним, что зависимости находятся на уровне jar, но при экспорте пакетов некоторые из них могут возникнуть из встроенных зависимостей. Если это произойдет, вы получите дублирующиеся classы, один набор inline в пакете верхнего уровня и другой во встроенной банке. Конечно, вы можете встроить всю встроенную банку, но прежде чем вы ее узнаете, она распространяется по всей цепочке зависимостей. Это только одна из проблем, о которых говорит Роланд и другие.

Вот пример, если вы используете Maven Bundle Plugin .

Примечание. Этот плагин автоматически импортирует пакеты, необходимые для ваших зависимостей. Это может быть или не быть проблемой для вас. К счастью, вы можете подавить пакеты, которые вам действительно не нужны для импорта (см. Ниже).

    !org.apache.jackrabbit.test, *   lib/concurrent-1.3.4.jar, lib/jackrabbit-core-2.6.5.jar, lib/jackrabbit-spi-2.6.5.jar, lib/jackrabbit-spi-commons-2.6.5.jar, lib/lucene-core-3.6.0.jar, lib/tika-core-1.3.jar   ., concurrent-1.3.4.jar, jackrabbit-core-2.6.5.jar, jackrabbit-spi-2.6.5.jar, jackrabbit-spi-commons-2.6.5.jar, lucene-core-3.6.0.jar, tika-core-1.3.jar  

Можем ли мы использовать OSGI для переопределения загрузочных во время загрузки загрузочных загрузочных машин bootstrap, например, если мы хотим переопределить JAXP1.4.5, доступные с Java7, для JAXP1.6, есть функция -Dendorese для переопределения API по умолчанию для обновленного API. Можем ли мы сделать это с помощью OSGI.

Interesting Posts

Число округлений до 2 десятичных мест в C

Разрешение LNK4098: defaultlib ‘MSVCRT’ конфликтует с

Измените имя exe в зависимости от условного символа компиляции

Как я могу получить ячейку в Excel, чтобы автоматически регулировать ее высоту, чтобы она соответствовала содержимому завернутого текста?

Нажмите строки таблицы, чтобы выбрать флажок, используя jQuery

Каков прецедент для var в ES6?

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

Как изменить файл hosts на android

Подключение mysql через 127.0.0.1 вместо localhost

Как использовать глобальный var для файлов в пакете?

Код для загрузки видео с Youtube на Java, Android

В чем разница между .cpp-файлом и файлом .h?

Есть ли ярлык для «Отметить все сообщения как прочитанные» в Outlook?

Ограничить перетаскиваемые объекты jQuery из перекрытия / столкновения с элементами-братьями

Как определить, какой SKSpriteNode был затронут

Давайте будем гением компьютера.