Как добавить зависимость в виде osgi bundle в karaf?
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 чтобы бандлы стартовали сразу после установки.
Спасибо за внимание!