Your SlideShare is downloading. ×
0
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Plugin development for intelli j platform
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Plugin development for intelli j platform

247

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
247
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Разработка плагинов на базе IntelliJ Platform Николай Чашников Nikolay.Chashnikov@jetbrains.com
  • 2. Continuous Integration ● сборка плагина ● запуск тестов ● установка и обновление плагина в IDE
  • 3. Структура дистрибутива плагина samplePlugin.zip samplePlugin lib samplePlugin.jar plugin classes META-INF plugin.xml pluginLib.jar ...
  • 4. Сборка плагина вне IDE ● IntelliJ IDEA Project runner (TeamCity) ● Ant (Build | Generate Ant Build) ● ...
  • 5. Настройка проекта для сборки на TeamCity создание артефакта для плагина (File | Project Structure | Artifacts)
  • 6. Build Configuration на TeamCity ● настройка VCS ● настройка внешних зависимостей (IDEA SDK) ○ получение через VCS ○ копирование на build agent ○ получение из стороннего репозитория (отдельный build step)
  • 7. Автоматические тестирование ● честные unit tests ● функциональные тесты в формате unit tests ○ ○ ○ ○ тестируют поведение загружают IntelliJ Platform (без UI) время работы достаточно велико не меняются при изменении реализации
  • 8. Запуск тестов на TeamCity ● через Ant, Maven,... ● через IntelliJ IDEA Project runner: ○ создать shared run configuration в IDEA ○ положить соответствующий файл в VCS ○ добавить название run configuration в настройках IDEA Project runner
  • 9. Возможности TeamCity ● автоматический запуск тестов ● просмотр результатов, история ● назначение ответственного за падение тестов ● проверка изменений до коммита в VCS (Remote Run)
  • 10. Установка плагина в IDE ● из репозитория plugins.jetbrains.com ● с диска (Settings | Plugins | Install plugin from disk) ● из собственного репозитория
  • 11. Собственый репозиторий плагинов File | Settings | Plugins | Browse Repositories | Manage Repositories, добавить ссылку на plugins.xml. plugins.xml: <plugins> <plugin id="samplePlugin" url="PluginZipFileUrl.zip" version="1.0"/> </plugins>
  • 12. Архитектура IntelliJ Platform Компоненты, сервисы, точки расширения
  • 13. Система компонентов ● экземпляры объектов хранятся в иерархии контейнеров PicoContainer ● иерархия состоит из трёх уровней ○ Application ○ Project ○ Module ● регистрируются в plugin.xml
  • 14. Получение экземпляра компонента ● метод getInstance(), getInstance(project), getInstance(module) ● dependency injection через параметры конструктора (другие компоненты данного уровня или более высоких уровней)
  • 15. Компоненты ● наследуются от ApplicationComponent, ProjectComponent, ModuleComponent ● регистрируются в <application-components>, <projectcomponents>,... в plugin.xml ● загружаются при старте IDE (загрузке проекта, загрузке модуля) init use dispose
  • 16. Сервисы ● не накладывают ограничений на наследование ● регистрируются в <applicationService>, <projectService>, <moduleService> ● загружаются при первом обращении (ServiceManager.getService()) ● если реализован интерфейс Disposable, метод dispose вызовется при закрытии IDE (проекта, модуля)
  • 17. Точки расширения ● ● ● ● регистрируются в <extensionPoints> полное имя - <plugin id>.<extension name> предполагают несколько реализаций для доступа к расширениям создаётся константа ExtensionPointName
  • 18. Точки расширения ● бывают двух видов: ○ beanClass - дают возможность задавать атрибуты расширения прямо в xml ○ interface - в расширении указывается только ссылка на класс, реализующий интерфейс ● могут быть уровня проекта или модуля (атрибут area), по умолчанию уровня application
  • 19. Расширения ● регистрируются в <extensions> ○ для расширений вида beanClass заполняются атрибуты ○ для расширений вида interface указывается полное имя класса в атрибуте implementation ● загружаются при первом обращении (ExtensionPointName.getExtensions())
  • 20. Плагины и их зависимости
  • 21. Plugin classpath ● jar файлы плагина (*.jar в директории ‘lib’) ● jar файлы плагинов, от которых он зависит ● jar файлы IDEA (*.jar в директории <IDEA_HOME>/lib )
  • 22. Зависимости плагина Определяются через <depends> в plugin.xml
  • 23. Опциональные зависимости Задаются тэгом <depends optional=”true” config-file=”fileName.xml”> в plugin.xml Компоненты из файла fileName.xml загружаются только в случае, если указанный плагин доступен
  • 24. Работа с фреймворками
  • 25. Конфигурирование фреймворка ● ● ● ● конфигурирование не требуется специальная библиотека (SDK) на уровне модуля на уровне проекта
  • 26. Фреймворк без конфигурации ● не требуется явных действий “добавить фреймворк” ● экшены (completion, inspections,...) определяют наличие фреймворка по аннотациям, наличию класса в зависимостях модуля (JavaPsiFacade.findClass(...,module. getModuleWithDependenciesAndLibrariesScope()),...
  • 27. Фреймворк-библиотека ● задаётся при помощи LibraryType ● можно хранить дополнительные настройки прямо в библиотеке ● настройки редактируются в библиотеке в диалоге Project Structure
  • 28. Фреймворк в настройками в модуле ● задаётся при помощи Facet (extension FacetType) ● настройки редактируются в диалоге Project Structure
  • 29. Фреймворк с настройками в проекте ● настройки хранятся в project service ● редактируются в диалоге Settings (extension projectConfigurable)
  • 30. Подключение фреймворка ● extension frameworkSupport (класс FrameworkSupportProvider) ● опция появляется в диалоге “New Project/Module Wizard” и в диалоге “Add Framework Support” (popup menu в Project View)
  • 31. Ссылки Исходный код плагина с примерами: https://github.com/chashnikov/intellij-sample-plugin

×