Разработка плагинов
на базе IntelliJ Platform
Николай Чашников
Nikolay.Chashnikov@jetbrains.com
Continuous Integration
● сборка плагина
● запуск тестов
● установка и обновление плагина в IDE
Структура дистрибутива плагина
samplePlugin.zip
samplePlugin
lib
samplePlugin.jar
plugin classes
META-INF
plugin.xml
plugi...
Сборка плагина вне IDE
● IntelliJ IDEA Project runner (TeamCity)
● Ant (Build | Generate Ant Build)
● ...
Настройка проекта для сборки на TeamCity

создание артефакта для плагина
(File | Project Structure | Artifacts)
Build Configuration на TeamCity
● настройка VCS
● настройка внешних зависимостей (IDEA
SDK)
○ получение через VCS
○ копиро...
Автоматические тестирование
● честные unit tests
● функциональные тесты в формате unit
tests
○
○
○
○

тестируют поведение
...
Запуск тестов на TeamCity
● через Ant, Maven,...
● через IntelliJ IDEA Project runner:
○ создать shared run configuration ...
Возможности TeamCity
● автоматический запуск тестов
● просмотр результатов, история
● назначение ответственного за падение...
Установка плагина в IDE
● из репозитория plugins.jetbrains.com
● с диска (Settings | Plugins | Install plugin
from disk)
●...
Собственый репозиторий плагинов
File | Settings | Plugins | Browse Repositories | Manage Repositories,
добавить ссылку на ...
Архитектура
IntelliJ Platform
Компоненты, сервисы, точки расширения
Система компонентов
● экземпляры объектов хранятся в
иерархии контейнеров PicoContainer
● иерархия состоит из трёх уровней...
Получение экземпляра компонента
● метод getInstance(), getInstance(project),
getInstance(module)
● dependency injection че...
Компоненты
● наследуются от ApplicationComponent,
ProjectComponent, ModuleComponent
● регистрируются в <application-compon...
Сервисы
● не накладывают ограничений на
наследование
● регистрируются в <applicationService>,
<projectService>, <moduleSer...
Точки расширения
●
●
●
●

регистрируются в <extensionPoints>
полное имя - <plugin id>.<extension name>
предполагают нескол...
Точки расширения
● бывают двух видов:
○ beanClass - дают возможность задавать
атрибуты расширения прямо в xml
○ interface ...
Расширения
● регистрируются в <extensions>
○ для расширений вида beanClass заполняются
атрибуты
○ для расширений вида inte...
Плагины и
их зависимости
Plugin classpath
● jar файлы плагина (*.jar в директории ‘lib’)
● jar файлы плагинов, от которых он
зависит
● jar файлы ID...
Зависимости плагина
Определяются через <depends> в plugin.xml
Опциональные зависимости
Задаются тэгом
<depends optional=”true”
config-file=”fileName.xml”>
в plugin.xml
Компоненты из фа...
Работа с фреймворками
Конфигурирование фреймворка
●
●
●
●

конфигурирование не требуется
специальная библиотека (SDK)
на уровне модуля
на уровне...
Фреймворк без конфигурации
● не требуется явных действий “добавить фреймворк”
● экшены (completion, inspections,...) опред...
Фреймворк-библиотека
● задаётся при помощи LibraryType
● можно хранить дополнительные
настройки прямо в библиотеке
● настр...
Фреймворк в настройками в
модуле
● задаётся при помощи Facet (extension
FacetType)
● настройки редактируются в диалоге
Pro...
Фреймворк с настройками в проекте
● настройки хранятся в project service
● редактируются в диалоге Settings
(extension pro...
Подключение фреймворка
● extension frameworkSupport (класс
FrameworkSupportProvider)
● опция появляется в диалоге “New
Pro...
Ссылки
Исходный код плагина с примерами:
https://github.com/chashnikov/intellij-sample-plugin
Upcoming SlideShare
Loading in...5
×

Plugin development for intelli j platform

252

Published on

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

  • Be the first to like this

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

No notes for slide

Transcript of "Plugin development for intelli j platform"

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

    Clipping is a handy way to collect important slides you want to go back to later.

×