Когда я начинал пользоваться OSGi вопрос, собственно, разработки и отладки встал сам собой. Отлаживать самостоятельное приложение на платформе, которая встроена в Eclipse было нерационально, слишком много бандлов он содержит и слишком много зависимостей — это с одной стороны. С другой стороны не хотелось, чтобы платформа расширялась при каждом обновлении Eclipse и обрастала новыми зависимостями. Короче говоря, мне от платформы нужен был только Jetty, OSGi консоль, EclipseLink и RAP/RWT.
Я хотел полностью контролировать состав среды выполнения и отлаживать проект именно в ней. А для этого надо было выделить OSGi платформу из Eclipse и натравить его на нее обратно. Как это сделать — я расскажу в этой статье.
Вообще, хочется сразу оградиться от рекомендаций использовать Eclipse Virgo или Apache Felix. Или Glassfish. Да, они большие, мощные, клевые. И тяжелые, сложные, громоздкие. Одна из особенностей Equinox в том, что он реально позволяет интегрировать себя с минимальными усилиями в проект. Мне не надо иметь тяжелый application server на
Рассказ будет достаточно подробным, поэтому кое-что вы можете пропустить. ;)
Шаг 1. Качаем Equinox
Взять его можно на официальном сайте: download.eclipse.org/equinox/. Качаем, разворачиваем куда угодно, под Windows у меня это было C:/Equinox, под Linux — /home/user/Equnox. Важно чтобы мы могли туда писать после развертывания, так что последим за правами.
Последняя версия на момент написания статьи 3.8.2 весит 28Mb. В ней 238 бандлов, включая исходники (примерно половина). Нам не обязательно включать их все, но удалять их из поставки не стоит — вдруг пригодятся. ;) Например, мне пока не понадобился P2 репозиторий, но для реализации автообновления системы он будет как нельзя кстати (это 64 бандла).
Теперь нам надо запустить все это хозяйство из под Eclipse, и позволить ему управлять составом бандлов и конфигурацией платформы.
Шаг 2. Настраиваем Eclipse
Подразумевается, что у вас есть адекватная задачам сборка — либо Eclipse for RAP/RCP developers, либо Eclipse for Java EE developers. Даже если это не так, то почти любую можно довести до адекватного состояния установив нужные бандлы через сам Eclipse. Или просто скачать нужную сборку и распаковать в другой каталог.
Кстати, советую брать Kepler milestone 7 который недавно вышел, хоть он и developer build, но достаточно стабилен, чтобы с ним можео было работать, в отличие от milestone 6.
Для начала идем в Eclipse в меню «Окно» / «Параметры» (у меня он русифицированный для удобства). А дальше как показано на картинках, создаем и загружаем нашу новую конфигурацию. Тут все интуитивно и понятно до чертиков, но это только полдела.
Вторая половина дела — настроить конфигурацию запуска непосредственно для вашего проекта. Что самое забавное — одна платформа может запускаться в разных конфигурациях и это дает некоторое пространство для маневра. Каждая конфиграция включает или отключает какие-то из компонентов системы. Совершенно не обязательно создавать несколько платформ, если только у вас нет несколько совершенно непохожих друг на друга проектов с разными наборами требуемых бандлов.
Шаг 3. Настройка конфиграции запуска
Из картинки ниже, думаю вполне ясно, куда тыкать и что конкретно создавать: «Среда OSGi Equinox». Есть один важный момент, нужно указать, где хранить конфигурацию от simpleconfigurator, который так любит Eclipse. Я указал, чтобы она хранилась вместе со средой в ее каталоге. Так проще потом переносить. Если этого не сделать, то конфиг будет храниться в workspace от Eclipse, а это очень и очень неудобно.
В принципе — это все, но может еще придется проверить наличие зависимостей, чтобы все было на месте. Базовая среда должна запуститься и так. В консоли Eclipse увидим заветное приглашение osgi>, ответим «ss» и получим список запущеных в системе бандлов.
На этом этапе каких-то сложностей возникнуть не должно. Ну а на последок, то, на что я убил 20 часов жизни ;), как запустить это хозяйство из командной строки и чтобы оно заработало корректно. Нужно запускать его также, как это делает Eclipse. А как он это делает?
#!/bin/sh
exec /usr/jdk/bin/java
-Dorg.osgi.service.http.secure.enabled=true
-Dorg.eclipse.equinox.http.jetty.https.enabled=true
-Dorg.osgi.service.http.port=8080
-Dorg.eclipse.equinox.http.jetty.https.port=8443
-Dorg.osgi.service.http.port.secure=8443
-Dorg.eclipse.equinox.http.jetty.ssl.keystore=/home/pavlov/Equinox/ssl/keystore
-Dorg.eclipse.equinox.http.jetty.ssl.password=xxxx
-Dorg.eclipse.equinox.http.jetty.ssl.keypassword=xxxx
-Dosgi.install.area=file:/home/pavlov/Equinox/
-Dosgi.syspath=/home/pavlov/Equinox/plugins -Declipse.ignoreApp=true
-Dosgi.noShutdown=true -jar
/home/pavlov/Equinox/plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
-configuration file:/home/pavlov/Equinox/configuration/
-dev file:/home/pavlov/Equinox/configuration/dev.properties
-os unix -ws unix -arch x86_64 -nl ru_RU -console -consoleLog
Вот магический скрипт, который делает то, что делает Eclipse, теперь наша платформа действительно самостояетельна и может быть развернута на любом сервере, где есть Java. Только пути надо прописать свои.
PS. Приятный бонус — тут сразу включается HTTPs в Embedded Jetty. Найти как это сделать, как оказалось, непросто.
Автор: futurelink