Русский English Тэги View Sergey Zolotaryov's profile on LinkedIn Вход
Превращение Eclipse проектов в osgi модули
Постоянная ссылка 26-05-2009 anydoby java eclipse

Возникла интересная задача - сконвертировать проекты Eclipse в osgi bundle с минимальными изменениями структуры проектов и билд цикла. Желательно, чтобы можно было экспортировать плагин без участия Eclipse.

Первая проблема - проект состоит из нескольких подпроектов, которые вроде бы зависят друг от друга нециклически (то есть, теоретически, можно из каждого проекта сделать плагин и связать их так же, как отдельные проекты), но на практике оказалось, что некоторые проекты вызывают классы из независимых проектов по имени, тем самым нарушая всю целостность структуры. В общем самое простое решение было - просто скинуть все проекты в один жирный модуль, чтобы не было проблем с видимостью классов (osgi модули загружаются каждый в своем classloader).

А вот тут проблема - плагин в Eclipse нельзя сделать из нескольких проектов. На помощь пришли linked source folders. В проекте-плагине идем в Properties/Java Build Path/Source и жмем Link Source. Добавляем все необходимые исходники из других проектов. Часть проблемы решена. Почему часть, далее.

Этот трюк помогает только для копиляции проекта-плагина. Для экспорта не годится, так как папки с исходниками виртуальные, а плагин экспортируется генерируемым ant скриптом. Для решения идем в build.properties и в


source.. = src/

вписываем через запятую все папки с исходниками, от которых зависит данный плагин:


source.. = src/,../dependency/src
output.. = bin/
bin.includes = META-INF/,\
               .

Теперь при экспорте из среды разработки проблем не будет. Осталась одна проблема - как же билдить без эклипса?

Мы используем для билдов Maven2, поэтому начал я с него. Нашелся интересный плагин - org.apache.felix:maven-bundle-plugin. Его нужно включить в билд (внимание, packaging проекта теперь не jar, а bundle). Команда mvn package будет создавать модуль, в который включены классы проекта, от которого он зависит (директива Private-Package заставляет билдер включать нужные классы прямо в архив модуля).

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

Добавить комментарий

Предыдущая статья Swing Explorer Следующая статья Как запретить автоматическое редактирование в JTable