Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java EE (J2EE) и Spring > Создание плагина к Eclipse с использованием Spring |
Автор: Prof_2000 25.3.2011, 13:48 | ||||||||||
Добрый день! В рамках работы над дипломом возникла следующая необходимость - разработать плагин к IDE Eclipse для сбора разнообразной информации о процессе работы с использованием интеграционного фреймворка Apache Camel. У него есть несколько способов настройки, но самый удобный - через Spring и его context.xml . Проект многомодульный, поэтому хочется использовать Apache Maven для сборки. При этом, к сожалению, опыта работы с OSGi - совсем немного. Нашел 2 принципиальных способа реализации задуманного: - http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html - com.springsource.bundlor По описанию понравился первый вариант, и я стал пробовать прикрутить его С миру по нитке была собрана вот такая конфигурация:
В результате - архив собирается таким, каким я хотел бы его видеть:
MANIFEST.MF - тоже похож на верный: в Bundle-Classpath автоматически прописываются все зависимости из pom.xml
В Import-Package все (казалось бы) зависимости раскрываются из *;resolution:=optional в нечто вроде:
Но для работоспособности плагина этого недостаточно. При запуске Eclipse с этим плагином - получается ошибка java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext . В target/dependency архив spring-context-3.0.5-RELEASE.jar лежит, в Bundle-Classpath прописан. Правда, этого пакета действительно нету в списке Import-Package. Если его туда насильно добавить - будет ошибка валидации (No available bundle exports package 'org.springframework.context') и плагин не активируется вообще. Притом, в этом случае такое сообщение вылазит не только про org.springframework.context, а еще для около 30 разных других пакетов, вообще никак не связанных с org.springframework.context, и даже с проектом вообще (например, org.apache.wicket)
В чем дело, я не могу самостоятельно разобраться уже несколько дней. Судя по всему, проблема в основном в моем непонимании OSGi (Camel тут вроде ни при чем, сам Spring и Maven тоже достаточно боком касаются). Если у кого-то есть хоть какие идеи, насчет того, в какую сторону копать - пожалуйста, помогите. Вариант с использованием Spring bundlor я не рассматривал, но если есть кто-то, кто работал именно с ним - и сможет направить на путь истинный - конечно рассмотрю. ![]() |
Автор: COVD 25.3.2011, 16:48 |
В IDE Netbeans есть заготовка проекта OSGi bundle. Как раз то, что вы начали делать - Мавен, Феликс. Наверное, вы работаете с IDE Eclipse. Может, там тоже есть готовый шаблон? Логично же начать с IDE Eclipse, раз плагин для него создается. |
Автор: Prof_2000 25.3.2011, 17:32 | ||
Да, вы правы, я действительно работаю в IDE Eclipse. Как таковой заготовки не нашлось, попробовал несколько maven archetypes - по сути то же самое - создается проект, с заготовкой OSGi (есть даже spring-osgi-bundle-archetype). Эта штуковина создает просто заготовку под OSGi - не Eclipse плагин. Пытаюсь упростить себе задачу как могу - из этой заготовки хочу сделать плагин типа HelloWorld(чтобы взял зависимость через Spring-овый bundle-context.xml и вывел в консоль). Для этого добавил туда Activator, прописал некоторые дополнительные аттрибуты в MANIFEST - пришел к похожей проблеме. Суть: Если не прописывавать внедрение зависимостей из pom.xml
То Import-Package достаточно компактно, там указан org.springframework.context, но вылазит ошибка "No available bundle exports package 'org.springframework.context'" (неудивительно, в собранном архиве плагина нет зависимостей типа spring-context-3.0.5-RELEASE.jar) Если в pom.xml добавить <Embed-Dependency> и.т.п - то Import-Package разрастается до невероятных размеров (там перечислены все транзитивные зависимости), причем самого org.springframework.context там уже нет. Плагин всё равно не запускается, ругань похожая - при запуске жалуется на отстутствие десятка пакетов, которые по сути не нужны (помечены как resolution=optional) Да и еще насчет шаблона в IDE - в идеале, процесс сборки ведь не должен зависеть от IDE. Но сейчас меня, конечно, устроило бы любое работоспособное решение. Может, кто-нибудь знает хотя бы какой-нибудь OpenSource плагинчик к Eclipse, чтоб внутри себя Spring использовал? |
Автор: COVD 25.3.2011, 19:19 |
Первое, что попалось на глаза для эклипса: http://www.vogella.de/articles/OSGi/article.html#OSGi_firstbundle |
Автор: Prof_2000 25.3.2011, 19:47 |
Спасибо, но это не совсем то. Точнее - это просто инструкция по созданию плагинов как таковых. В этой инструкции немного сказано про управление зависимостями - лишь то, что для доступа к классам из других bundle надо их добавлять в Import-Package. У меня же ситуация следующая: я хочу jar-файлы зависимостей (типа тот же Spring) сложить прямо к себе в архив с плагином. И это даже удается для простеньких архивов без транзитивных зависимостей (Embed-Dependoncy и.т.д.). А в случае со Спрингом - там столько разных нюансов, что я, видимо, уже просто запутался. Собственно, из-за громоздкости Спринга я и начал возиться с Maven (иначе пару jar-файлов можно было и вручную прописать в MANIFEST.MF) |
Автор: Prof_2000 26.3.2011, 14:35 | ||||
Я решил свою проблему. Суть заключалась в том, что для размещения просто использовался не тот архив, который собирался. В итоге - транзитивные зависимости не подтягивались. Помогло добавление
Решение, безусловно, не идеально. Для Spring существуют специальные OSGi бандлы, Spring DM, здесь все эти преимущества теряются - все зависимости встраиваются в пакте плагина - он перестает быть модульным. Но этого решения может хватить на первое время для создания PoC. Для отладки запускаю из Eclipse PDE - для тестового запуска сейчас нужно проделать целый ряд почти магических манипуляций:
Спасибо COVD за участие. Если у кого-нибудь есть советы - буду по-прежнему рад их выслушать. Но вопрос, по сути, уже решен. |
Автор: COVD 26.3.2011, 15:25 |
Prof_2000 , рад за вас. Но все же думаю, что есть для эклипса какой-то визард (или появится), который делает всю эту рутину с правкой MANIFEST, pom.xml и пр. |