|
Модераторы: LSD, AntonSaburov |
|
Prof_2000 |
|
||||||||||
Шустрый Профиль Группа: Участник Сообщений: 121 Регистрация: 26.3.2005 Где: Харьков, Украина Репутация: нет Всего: 1 |
Добрый день!
В рамках работы над дипломом возникла следующая необходимость - разработать плагин к IDE Eclipse для сбора разнообразной информации о процессе работы с использованием интеграционного фреймворка Apache Camel. У него есть несколько способов настройки, но самый удобный - через Spring и его context.xml . Проект многомодульный, поэтому хочется использовать Apache Maven для сборки. При этом, к сожалению, опыта работы с OSGi - совсем немного. Нашел 2 принципиальных способа реализации задуманного: - maven-bundle-plugin - 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 я не рассматривал, но если есть кто-то, кто работал именно с ним - и сможет направить на путь истинный - конечно рассмотрю. Это сообщение отредактировал(а) Prof_2000 - 25.3.2011, 18:24 --------------------
Pereant qui ante nos nostra dixerunt! (лат.) Да погибнут те, кто раньше нас высказал наши мысли! |
||||||||||
|
|||||||||||
COVD |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
В IDE Netbeans есть заготовка проекта OSGi bundle. Как раз то, что вы начали делать - Мавен, Феликс. Наверное, вы работаете с IDE Eclipse. Может, там тоже есть готовый шаблон? Логично же начать с IDE Eclipse, раз плагин для него создается.
|
|||
|
||||
Prof_2000 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 121 Регистрация: 26.3.2005 Где: Харьков, Украина Репутация: нет Всего: 1 |
Да, вы правы, я действительно работаю в 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 использовал? --------------------
Pereant qui ante nos nostra dixerunt! (лат.) Да погибнут те, кто раньше нас высказал наши мысли! |
|||
|
||||
COVD |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
||||
|
||||
Prof_2000 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 121 Регистрация: 26.3.2005 Где: Харьков, Украина Репутация: нет Всего: 1 |
Спасибо, но это не совсем то. Точнее - это просто инструкция по созданию плагинов как таковых.
В этой инструкции немного сказано про управление зависимостями - лишь то, что для доступа к классам из других bundle надо их добавлять в Import-Package. У меня же ситуация следующая: я хочу jar-файлы зависимостей (типа тот же Spring) сложить прямо к себе в архив с плагином. И это даже удается для простеньких архивов без транзитивных зависимостей (Embed-Dependoncy и.т.д.). А в случае со Спрингом - там столько разных нюансов, что я, видимо, уже просто запутался. Собственно, из-за громоздкости Спринга я и начал возиться с Maven (иначе пару jar-файлов можно было и вручную прописать в MANIFEST.MF) Это сообщение отредактировал(а) Prof_2000 - 25.3.2011, 19:50 --------------------
Pereant qui ante nos nostra dixerunt! (лат.) Да погибнут те, кто раньше нас высказал наши мысли! |
|||
|
||||
Prof_2000 |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 121 Регистрация: 26.3.2005 Где: Харьков, Украина Репутация: нет Всего: 1 |
Я решил свою проблему. Суть заключалась в том, что для размещения просто использовался не тот архив, который собирался. В итоге - транзитивные зависимости не подтягивались.
Помогло добавление
Решение, безусловно, не идеально. Для Spring существуют специальные OSGi бандлы, Spring DM, здесь все эти преимущества теряются - все зависимости встраиваются в пакте плагина - он перестает быть модульным. Но этого решения может хватить на первое время для создания PoC. Для отладки запускаю из Eclipse PDE - для тестового запуска сейчас нужно проделать целый ряд почти магических манипуляций:
Спасибо COVD за участие. Если у кого-нибудь есть советы - буду по-прежнему рад их выслушать. Но вопрос, по сути, уже решен. --------------------
Pereant qui ante nos nostra dixerunt! (лат.) Да погибнут те, кто раньше нас высказал наши мысли! |
||||
|
|||||
COVD |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Prof_2000 , рад за вас. Но все же думаю, что есть для эклипса какой-то визард (или появится), который делает всю эту рутину с правкой MANIFEST, pom.xml и пр.
|
|||
|
||||
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |