Эффективный рабочий процесс разработки OSGi - PullRequest
15 голосов
/ 30 июля 2011

Я работаю над продуктом, состоящим из множества пакетов, работающих как функции поверх karaf. Обычно наши разработчики работают по одному пакету за раз. Наша обычная разработка идет примерно так: код, компиляция, копирование пакета в папку развертывания, тестирование. Мы также обнаружили, что hotdeploy просто отказывается переопределять определенные пакеты, которые устанавливаются как функции, без перезапуска сервера или удаления / переустановки функции, поэтому иногда цикл увеличивается.

Мой вопрос: есть ли у кого-то в сообществе лучший способ? То, как мы работаем, работает, но я чувствую, что это довольно медленно и неэффективно, и я держу пари, что кто-то придумал что-то лучшее!

РЕДАКТИРОВАТЬ: Я понимаю, что я был довольно неясным в моем вопросе ... Мы используем Равноденствие под Караф. Мы также используем Eclipse и Maven, хотя я не знаю, насколько важно использовать Maven.

Ответы [ 4 ]

9 голосов
/ 01 августа 2011

Звучит так, будто вы хотите команду dev: watch .Из документации:

Команда watch может использоваться для помощи во время разработки.Это позволяет вам настроить набор URL, которые будут отслеживаться.Все пакеты, соответствующие указанному URL, будут автоматически обновлены.Это позволяет избежать необходимости обновления пакетов вручную или даже копирования пакета в системную папку, если это необходимо.Обратите внимание, что только основанные на maven URL и моментальные снимки maven будут обновляться автоматически, поэтому, если вы запустите

dev: watch *

Он будет фактически контролировать все пакеты, которые имеют местоположение, соответствующее mvn: *, чтоесть '-SNAPSHOT' в их URL.

Выполнение команды "dev: watch --help" из оболочки Karaf выведет список доступных флагов и аргументов.

Что-то похожее - PAX-плагин

Любой из них будет работать очень хорошо, если у вас есть плагин m2 maven для Eclipse.

ОБНОВЛЕНО: В моей компании мы стремимся быть настолько TDD, насколько это возможно, поэтому большая часть разработки выполняется без явного запуска Karaf.В обычном сочетании модульных тестов мы также используем Pax Exam , что в значительной степени фантастично, даже если вы запускаете из Eclipse =)

Это помогает убедиться, что мы не слишком привязаны к каким-либоСпецифика Карафа, так как она работает с Equinox / Felix / Concierge (поэтому я смоделирую различные особенности Карафа, от которых мы зависим, например, аутентификацию JAAS).Наряду со многими другими классными инструментами / функциями, он способен предоставлять функции Karaf, а с помощью TinyBundles вы можете даже создавать пакеты на лету (опять же полезно для насмешек / заглушек).

Pax Exam hooksв среду JUnit, предоставив JUnit @Runner, последняя версия (2) намного быстрее и имеет API на основе DSL, поэтому тесты довольно лаконичны и читабельны.

Использование Pax Exam дает нам хорошее тестовое покрытие и короткие сроки разработки.Там, где тесты менее практичны или мы ищем ошибки, которые не обнаруживаются в тестах, команда dev: watch неоценима.

В итоге;Имейте в виду, что вы обязательно должны проводить свои разработки с помощью тестов ( Pax Exam прекрасно впишется в вашу существующую сборку, и как только вы к ней привыкнете, вы найдете разработку быстрее).Вы можете сразу начать использовать команду dev: watch , это, безусловно, ускорит вашу текущую ситуацию.

ОБНОВЛЕНИЕ 2: отвечая на другой вопрос, я добавил maven пример тестирования Pax-ExamКомпонентный завод.Разработка на основе тестирования, пожалуй, самый эффективный рабочий процесс, доступный разработчикам сегодня.ссылка на вопрос: osgi: Использование ServiceFactories? и ссылка на исходный код: http://dl.dropbox.com/u/2465717/net.earcam.example.servicecomponent_2011-08-16_15-52.tgz

3 голосов
/ 25 апреля 2012

если вы используете Eclipse, Eclipse Libra может быть вам полезен.Весы могут запускать Felix, Equinox и Knopflerfish внутри Eclipse, как и любой другой сервер с WST.У них есть видео на YouTube, как его использовать.

Я также написал несколько инструментов, которые могут помочь:

  • Пакет osgi, который выбирает службы OSGI, соответствующие фильтру (osgitest = junit4).При этом вы не пишете классы Junit, но можете предоставлять предварительно сконфигурированные объекты (например, с OSGI Blueprint).JUnit than запускается на основе аннотаций, предоставленных в интерфейсе, который реализует ваша служба.
  • Плагин maven, имеющий следующие полезные цели
    • Запуск контейнеров OSGI и развертывание проекта maven комплекта со всеми егозависимости (которые, конечно, являются связками OSGI).Запуск контейнера OSGI выполняется с помощью экзамена PAX, но тесты JUnit запускаются с помощью пакета OSGI, который я написал (который запускает предоставляемые вами службы OSGI).
    • Создайте папку, содержащуюярлык ко всем зависимостям проекта (находится в репозитории maven или в целевом каталоге папки)

Если проекты развернуты на сервере (Eclipse Libra), я долженскажем, только обновить X, где X - это идентификатор пакета, и все быстро обновляется.Вам не нужно повторно компилировать проекты, которые публикуются на сервере, если вы запускаете Equinox в Libra, поскольку он указывает на папку целевых классов, которая обновляется сразу после сохранения вашего класса или файла pom.xml.

Если вы не публикуете свой проект на сервере, но добавляете его в виде пакета в контейнере, указывающем на папку ярлыков, вы также можете запустить команду обновления в консоли OSGi после запуска mvn install (без перезапуска сервера).

Пошаговое руководство доступно по адресу http://cookbook.everit.org/

. С помощью следующего метода можно писать тесты в виде тестов TDD и запускать их как часть компиляции maven на CI.сервер.

Надеюсь, вы найдете эти инструменты такими же полезными, как и я!

2 голосов
/ 30 июля 2011

Зависит от платформы под Карафом: Феликс или Равноденствие.

Equinox

Eclipse имеет отличную (или почти превосходную) поддержку для запуска Equinox с выбранными вами пакетами. Вам нужно подготовить две вещи:

  1. Связки, находящиеся в стадии разработки, доступны в рабочей области в виде подключаемых проектов
  2. Целевая платформа, содержащая оставшиеся пакеты приложения

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

Если вы используете Equinox, это даст дополнительное преимущество, поскольку среда выполнения выполнит код непосредственно из рабочей области.

Felix

У Феликса, похоже, нет такой поддержки для запуска из Eclipse (хотя есть работа в этом направлении, отслеженная в этой проблеме Jira ). Вы также можете запустить его как обычное Java-приложение, но это далеко не удобно. В этом случае использование Maven будет гораздо лучшей альтернативой. Вы по-прежнему можете настроить Eclipse, чтобы в полной мере использовать другие функции PDE, только запуск будет осуществляться извне.

Краткое описание

Таким образом, вы всегда можете автоматизировать все через Maven, и Караф очень поможет вам в этом. Затмение даст небольшое преимущество, если вы используете Equinox. Вы должны иметь возможность оперативной замены кода независимо от используемого вами метода, потому что замена оперативного кода вообще не учитывает OSGi (за исключением единственного случая, когда вы перезагружаете свой пакет и создается новый загрузчик классов). ).

2 голосов
/ 30 июля 2011

Я получил отличные результаты, используя Equinox в Eclipse - даже горячая замена кода работает правильно.Разумеется, целевая платформа небольшая, и у нас всего порядка 50 собственных пакетов, но рабочий процесс выглядит следующим образом:

Во-первых, у нас есть целевая платформа, которая содержит все сторонние пакеты и пакеты Eclipse.Eclipse заботится о загрузке и управлении ими.Затем в рабочей области есть все пакеты проекта, сгруппированные в 3-4 рабочих набора.При сохранении компиляция происходит как обычно, иногда GWT необходимо перекомпилировать, но даже тогда изменения сразу же принимаются, потому что развертывание не требуется - работающая система Equinox использует распакованные папки проекта в качестве пакетов.Запуск этого изнутри Eclipse дает нам оперативную замену кода, изменяющие файлы шаблонов на лету, только изменения MANIFEST.MF / plugin.xml требуют обновления пакета - и даже тогда обычно быстрее просто перезапустить структуру, чем вводить вконсоль.

...