четверг, 2 сентября 2010 г.

Eclipse RCP: Целевые платформы Eclipse (Eclipse Target Platforms)


Начиная с Eclipse 3.3 существует удобная возможность управления бандлами, доступными при разработке плагинов/RCP-приложений с помощью Eclipse PDE. Речь идет о таком понятии, как "целевая платформа" (Eclipse Target Platform) - списке бандлов и параметров, которые будут доступны при компиляции, отладке и тестировании плагинов из рабочего пространства (Eclipse Workspace).

Зачем создавать собственные целевые платформы


По-умолчанию в качестве целевой платформы используется содержимое каталога plugins запущенного экземпляра Eclipse. Обычно в такой целевой платформе содержатся сотни бандлов (в моем Eclipse for RCP and RAP Developers их 467), что как правило очень много и вовсе не нужно для компиляции/отладки/тестирования RCP/RAP-приложения или плагина. Зачем тратить время (особенно при разработке, когда перезапускать приложение приходится довольно часто) на ожидание старта сотен бандлов, если их нужно от силы 20-30?

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

1. Для разработки используется т.н. milestone-релиз, но недопустимо, чтобы разрабатываемое приложение зависело от бета-версий бандлов.

2. Нужно добавить EMF, ECF, GEF, BIRT или какую-нибудь другую технологию, используемую в разрабатываемом приложении, но не хочется засорять используемое для разработки окружение (другими словами, не хочется добавлять бандлы, от которых зависит разрабатываемое приложение, в каталог plugins используемого экземпляра Eclipse).

Создание целевой платформы


Для управления целевыми платформами существует страница конфигурации Window -> Preferences -> Plug-in Development -> Target Platform. На данной странице представлен список доступных целевых платформ, по-умолчанию состоящий из одного элемента - Running Platform и список путей к бандлам, по-умолчанию задан путь к запущенному экземпляру Eclipse:



Для того, чтобы обновить целевую платформу служит кнопка Reload.... Например, если поместить новые бандлы в один из каталогов платформы и нажать Reload... - они будут добавлены. Внимание! Просто поместить бандлы в каталог целевой платформы недостаточно, обязательно нужно ее обновить.

Существующую целевую платформу можно удалить или отредактировать, нажав кнопку Remove или Edit..., соответственно. Мастер редактирования платформы совпадает с мастером добавления новой, который вызывается с помощью кнопки Add..., поэтому ограничимся описанием только мастера добавления.

Первое окно - Target Definition - служит для выбора начального содержимого платформы. Доступны следующие варианты:
- Nothing: Start with an empty target definition - создает пустую целевую платформу без бандлов.
- Default: Default target for running platform - создает платформу по-умолчанию, использует бандлы, содержащиеся в каталоге plugins запущенного экземпляра Eclipse.
- Current Target: Copy settings from the current target platform - создает копию текущей платформы.
- Template - позволяет создать целевую платформу по шаблону, по-умолчанию доступно два шаблона: Base RCP (Binary Only) и Base RCP (with Source), представляющие собой бандлы необходимые для запуска базового RCP-приложения. Список шаблонов можно расширить - достаточно установить Eclipse-плагин, реализующий точку расширения org.eclipse.pde.core.targets.



На втором шаге мастера производится настройка создаваемой целевой платформы. Данная страница мастера содержит поле Name, позволяющее задать название настраиваемой платформы и пять вкладок. Рассмотрим каждую из них подробнее.

Вкладка Location - позволяет указать пути расположения бандлов. Добавляются пути с помощью кнопки Add..., редактируются и удаляются - с помощью кнопок Edit... и Remove, соответственно.



При нажатии на кнопку Add... появляется окно выбора типа расположения: Directory, Installation, Features и Software Site.



Directory - позволяет указать каталог, в котором расположены плагины. Происходит сканирование непосредственно директории и ее поддиректории plugins:





Installation - позволяет указать каталог, в который установлен Eclipse SDK либо другое RCP-приложение или OSGi-фреймворк. От типа Directory отличается тем, что позволяет так же указать расположение файлов конфигурации для фреймворка.





Features - позволяет создать конфигурацию, основанную на компонентах (Features) - базовых логических модулях, предоставляющих ту или иную функциональность, например ECF, EMF и т.д. По сути, компонент - комплект бандлов, реализующих какой-либо проект или логически законченную часть проекта. Можно выбрать каталог, в котором непосредственно находятся компоненты, либо каталог, в котором находится каталог features. Затем, Eclipse PDE позволит выбрать нужные компоненты из расположенных в данном каталоге. Бандлы, из которых состоят выбранные компоненты будут добавлены в целевую платформу.



Software Site - позволяет указать путь к p2-репозиторию, т.н. Update Site - URL, по которому расположен XML-файл специального формата, представляющий собой описание доступных плагинов и компонент. Данный тип расположения позволяет добавлять в целевую платформу бандлы и компоненты, не скачивая их предварительно.





Если нажать кнопку Finish при добавлении Software Site, то начнется загрузка информации о доступных бандлах, которая может занимать длительное время (в зависимости от количество выбранных продуктов и скорости соединения с Интернет).





Галочка Show location content позволяет посмотреть содержимое выбранных каталогов:



Вкладка Content - позволяет выбрать бандлы для добавления в целевую платформу. На данной вкладке можно использовать фильтр по имени бандлов (type filter text), кнопки Select All и Deselect All, а так же кнопку Add Required, позволяющую выбрать бандлы, от которых зависят уже выбранные. Обычно используется следующая стратегия: выбираются необходимые бандлы, затем нажимается кнопка Add Required, разрешающая зависимости.



На данной вкладке так же находится переключатель Manage using, позволяющий выбрать на основе чего строить конфигурацию - на основе бандлов (Plug-ins) или на основе компонент (Features):



Переключатель Show позволяет выбрать что показывать - бандлы с бинарным кодом и/или с исходниками:



И, наконец, переключатель Group by позволяет настроить группировку при отображении бандлов - по пути к файлам или по названию расположения:





Вкладка Environment - позволяет задать параметры окружения, в котором будет работать целевая платформа. На данной вкладке можно задать предполагаемую операционную систему, оконный менеджер, архитектуру процессора и используемую локаль, а так же указать версию JRE и т.н. Execution Environment:



Вкладка Arguments - позволяет задать аргументы командной строки и Java-машины, которые будут использоваться при запуске приложения с использованием данной целевой платформы:



Вкладка Implicit Dependencies позволяет задать неявные зависимости - бандлы, которые будут всегда добавляться в конфигурацию запуска приложений на данной целевой платформы. Для добавления неявных зависимостей служит кнопка Add..., при нажатии на которую появляется простое окно выбора бандлов с фильтром:





После нажатия на кнопку Finish работа мастера завершится и новая целевая платформа будет добавлена в соответствующий список:



Для сохранения изменений необходимо нажать кнопку Apply. Активная для рабочего пространства целевая платформа отмечается галочкой. Ее название будет выделено полужирным шрифтом и словом Active, расположенным в скобках после него.

Экспорт/Импорт настроек целевой платформы в файл/из файла


Созданные целевые платформы сохраняются в текущем рабочем пространстве - в каталоге .metadata/.plugins/org.eclipse.pde.core/.local_targets. Однако, существует возможность указать файл внутри какого-либо из проектов текущего рабочего пространства, в который будут экспортированы настройки платформы. Файл представляет собой XML-разметку и имеет расширение .target. Тот факт, что файл с настройками является обычным текстовым файлом, позволяет сохранять его в системе контроля версий, следить за изменениями, обновлять при необходимости и производить любые манипуляции, которые можно производить с файлом, сохраненным в системе контроля версий. В частности, возможность сохранять настройки платформы в файл упрощает обмен данными настройками между разработчиками в команде, что позволяет всем разработчикам, работающим над проектом, иметь одну и ту же целевую платформу.

Для сохранения настроек выбранной из списка платформы служит кнопка Share.... При нажатии на данную кнопку появится окно с фильтром, позволяющее выбрать проект из рабочего пространства и каталог внутри данного проекта, в котором будет создан target-файл. Так же в данном окне присутствует поле File, в котором необходимо указать имя target-файла. Расширение .target будет добавлено автоматически:



После сохранения настроек в файл, путь к нему будет отображаться после названия целевой платформы в списке Target definitions:



Создать target-файл можно так же и с помощью диалога New, вызвав его, например, из контекстного меню проекта:



При создании файла необходимо указать его месторасположение и метод инициализации создаваемой целевой платформы. Варианты инициализации подробно описаны выше.



Eclipse PDE имеет удобный многостраничный редактор target-файлов, содержащий вкладки Definition, Content и Environment:

Вкладка Definition - позволяет задать основные настройки целевой платформы - ее название и набор расположений бандлов. Процедура добавления расположений аналогична описанной выше для страницы настроек.



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



Вкладка Environment - позволяет настроить окружение, в котором будет работать целевая платформа. Содержимое данной вкладки складывается из содержимого вкладок Environment, Arguments и Implicit Dependencies мастера добавления/редактирования платформы.



Следует помнить, что при удалении целевой платформы из списка Target definitions будет удален и связанный с нею target-файл.

Если у вас уже есть созданный кем-то target-файл, то для импорта настроек, достаточно скопировать его в какой-либо каталог одного из проектов рабочего пространства и обновить данный проект.

Экспорт содержимого целевой платформы


В Eclipse Helios добавлена возможность экспортировать содержимое текущей активной целевой платформы в указанный каталог. Под содержимым понимаются бандлы и компоненты, составляющие платформу.

Мастер экспорта вызывается из меню File -> Export -> Plug-in Development -> Target definition:



В окошке мастера необходимо указать каталог, в который будет осуществлен экспорт. Так же можно отметить галочку Clear destination directory before export, тем самым указав, что необходимо удалить содержимое выбранного каталога перед экспортом:



После экспорта в указанном каталоге будут созданы директории features и plugins для компонентов и бандлов, составляющих целевую платформу, соответственно, а также файл content.xml, описывающий созданный репозиторий.

Конфигурация запуска


Родственным понятию "целевая платформа" является понятие "конфигурация запуска" - Launch Configuration для OSGi/Eclipse-проектов. В отличие от целевой платформы в одном рабочем пространстве может быть создано множество активных конфигураций запуска, которые не привязываются ни к какому проекту, т.е. любой проект можно запускать, используя разные конфигурации запуска, и в то же время в рамках одной конфигурации запуска можно использовать несколько проектов.

Создать конфигурацию запуска можно из контекстного меню проекта Run As -> Run Configuration... или Debug As -> Debug Configuration...:



Если из дерева конфигураций (расположено в левой части окна Run Configurations) выбрать существующую или создать новую (щелкнув длва раза на названии типа) конфигурацию типа OSGi Framework или Eclipse Application, то в правой части окна откроется многостраничный редактор соответствующей конфигурации, содержащий вкладку Bundles в случае OSGi Framework или Plug-ins в случае Eclipse Application. Данные вкладки аналогичны по возможностям вкладкам Content мастера создания/редактирования целевой платформы и target-файла:





Начиная с Eclipse Helios, появилась возможность составлять конфигурации запуска на основе компонентов, а не бандлов. Данная возможность удобна, когда требуется составить большую конфигурацию запуска из множества связанных с Eclipse проектов, например Equinox, EMF, ECF и т.д.:





По-умолчанию при создании новой конфигурации запуска выбраны все бандлы из рабочего пространства и текущей активной целевой платформы. Зачастую все данные бандлы не нужны для отладки/тестирования проекта, поэтому используется следующая стратегия создания конфигурации запуска:

- Отменяется выбор всех бандлов (кнопка Deselect All)
- Добавляются бандлы, необходимые для отладки/тестирования проекта (т.е. бандлы, из которых состоит проект)
- Автоматически разрешаются зависимости и добавляются бандлы, от которых зависят выбранные (кнопка Add Required Bundles).

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

Конфигурации запуска, как и целевые платформы, можно экспортировать в XML-файлы с расширением .launch. Мастер экспорта конфигураций запуска вызывается из меню File -> Export -> Run/Debug -> Launch Configurations.



В окошке мастера указываются экспортируемые конфигурации запуска (сгруппированы по типам) и каталог, в который будет осуществлен экспорт (поле Location). Если указана галочка Overwrite exiting file(s) without warning, то существующие файлы будут заменены без предупреждения со стороны Eclipse.



Импорт конфигурации запуска осуществляется так же как и импорт целевой платформы - достаточно поместить .launch-файлы в какой-либо из проектов рабочего пространства и обновить данный проект.

Ссылки


При написании статьи использовались следующие материалы:


Понравилось сообщение - подпишитесь на блог или читайте меня в twitter

6 комментариев:

Allex комментирует...

А в проекте можно указать целевую платформу, которая ему необходима? Чтобы достать проект из svn и не мучаться с окружением.

Pavel Samolisov комментирует...

Обычно ведь разработка одного приложения идет в одном воркспейсе, поэтому и таргет-платформы сделали для воркспейса. В SVN можно хранить как бандлы платформы (см. экспорт платформы) так и .target-файл.

Для отдельного проекта можно указать конфигурацию запуска.

Allex комментирует...

Для того, чтобы указать, в каком окружении должен запускаться проект, надо создать Launch Configuration и сохранить её в файл в этом проекте. Невнимательно прочитал конец статьи...

yura комментирует...

Спасибо! Очень хорошо написано.

Pavel Samolisov комментирует...

Спасибо Вячеславу Алеферову за замеченную опечатку.

Andrey Kozlov комментирует...

Спасибо за статью, очень помогло! Была проблема, после сборки проекта некоторые плагины планировалось заменять на перекомпилированные, с которыми невозможен обычный запуск эклипса. После прочтения статьи проблема самоустранилась!

Отправить комментарий

Любой Ваш комментарий важен для меня, однако, помните, что действует предмодерация. Давайте уважать друг друга!