Как работать с частыми локальными развертываниями пакетных снимков на Karaf?

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

Теперь я делаю это сборка maven, которая создает пакет JAR, а затем копируется в каталог развертывания Karaf. Я думаю, что он совсем не изящный.

Я пытался найти способ (google). Я читал о функциях Karaf, но кажется, что, несмотря на то, что это хороший механизм развертывания всего приложения, он не решает мою проблему. Насколько я понимаю, правильно, он не проверяет, появилась ли новая версия моего баннера SNAPSHOT в моем местном репозитории maven?

Ответ 1

Ключом, чтобы сделать механизм обновления работы karaf, является развертывание из maven вместо использования папки развертывания. Установите пакет следующим образом:

install -s mvn:groupid/artifactID/version

или

install -s mvn:groupid/artifactID/version/typeOfMavenArtifact

Второй вариант полезен для установки, например, артефактов war/wab. Полную спецификацию протокола maven можно найти здесь.

Тогда Караф знает, откуда появился пучок. Вы также можете проверить это, используя la -u. Это означает, что karaf показывает местоположение обновления, которое теперь должно быть maven uri. Вы не будете, чтобы все пакеты karaf имели место для обновления, подобное этому.

Когда вы теперь создаете новую сборку своего проекта с помощью maven, это окажется в вашем локальном репозитории maven. Затем просто запустите

update <bundleid>

Это заставляет karaf проверять местоположение обновления (в вашем случае вы локальный репозиторий maven) и перезагружать пакет оттуда.

Вы можете еще больше автоматизировать это, используя

dev:watch

или для карафа 3+

bundle:watch

Это заставит karaf проверить вам maven repo на изменения в пакетах SNAPSHOT, которые он развернул, и автоматически перераспределить их.

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

export KARAF_DEBUG=true

перед запуском карафа. Затем он будет прослушивать отладчик на порту 5005.

Затем вы можете запустить сеанс удаленного отладки eclipse на том же порту и хорошо отладить ваше приложение в karaf. Это работает очень хорошо, даже если вы измените свой пакет, используя один из подходов выше. Таким образом, вы можете отлаживать, находить свою проблему, изменять код, создавать и продолжать отладку с измененной версией.

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