Как добавить зависимость в виде osgi bundle в karaf?

Написано 9 Май, 2013 в категории Кладовая

1. В консоли karaf надо написать вот так:

root@karaf>osgi:install wrap:mvn:org.apache.commons/commons-lang3/3.1

org.apache.commons = это groupId
commons-lang3 = artifactId
3.1 = version

В общем случае, если jar отсутствует в известных публичных maven репозитариях, то jar должен быть предварительно установлен в локальный maven-репозитарий. Бывает, что в публичном репозитарии необходимая библиотека имеется, но karaf отказывается видеть библиотеку. Обычно это происходит потому, что у karaf'a есть настройка, в которой указано с какими репозитариями разрешено работать karaf'y. Настройка называется org.ops4j.pax.url.mvn.repositories, а находится она в %SM_HOME%/etc/org.ops4j.pax.url.mvn.cfg

2. Однажды работая в webconsole (features:install webconsole) я удалил commons-httpclient версии 3.1, от которого зависит camel-http, от которого зависел мой бандл.
Однако выполнив приведенную команду:

root@karaf>osgi:install 'wrap:mvn:commons-httpclient/commons-httpclient/3.1'

и запустив бандл, оказалось что camel-http, по-прежнему не видит нужных пакетов.
А вот что экспортировалось в бандле commons-httpclient:

Версия:	3.1
Экспортируемые пакеты:
org.apache.commons.httpclient,version=0.0.0
org.apache.commons.httpclient.auth,version=0.0.0
org.apache.commons.httpclient.cookie,version=0.0.0
org.apache.commons.httpclient.methods,version=0.0.0
org.apache.commons.httpclient.methods.multipart,version=0.0.0
org.apache.commons.httpclient.params,version=0.0.0
org.apache.commons.httpclient.protocol,version=0.0.0
org.apache.commons.httpclient.util,version=0.0.0

Очень смущала версия пакетов 0.0.0

Для проверки этой гипотезы был применен такой способ задания заголовков бандла:

root@karaf>osgi:install -s 'wrap:mvn:commons-httpclient/commons-httpclient/3.1$Export-Package=*;version="3.1"'

И мы получим такую картину:

Версия:	3.1
Экспортируемые пакеты:
org.apache.commons.httpclient,version=3.1.0
org.apache.commons.httpclient.auth,version=3.1.0
org.apache.commons.httpclient.cookie,version=3.1.0
org.apache.commons.httpclient.methods,version=3.1.0
org.apache.commons.httpclient.methods.multipart,version=3.1.0
org.apache.commons.httpclient.params,version=3.1.0
org.apache.commons.httpclient.protocol,version=3.1.0
org.apache.commons.httpclient.util,version=3.1.0

В принципе, можно устанавливать любые заголовки бандла, например так:

root@karaf>osgi:install -s 'wrap:mvn:commons-httpclient/commons-httpclient/3.1$Bundle-SymbolicName=Apache Commons Httpclient&Export-Package=*;version="3.1"'

Обратите внимание, что название заголовка и его значение разделяются символом "=", а сами заголовки разделяются амперсандом.
В примерах выше использовался ключ -s чтобы бандлы стартовали сразу после установки.

Спасибо за внимание!