Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SBT Remote Control Extension for Intellij IDEA

SBT Remote Control Extension for Intellij IDEA

Avatar for Nikolay Obedin

Nikolay Obedin

June 08, 2015
Tweet

Other Decks in Programming

Transcript

  1. Санкт-Петербургский Aкадемический Университет Расширение SBT Remote Control для IntelliJ IDEA

    Студент: Н.В. Обедин Руководитель: А.В. Подхалюзин Санкт-Петербург 2015 1/13
  2. SCALA И SBT • Scala – язык программирования для JVM.

    • Совмещает объектно-ориентированный и функциональный подходы • Используется в Linkedin, Twitter, Foursquare, Coursera. 2/13
  3. SCALA И SBT • Scala – язык программирования для JVM.

    • Совмещает объектно-ориентированный и функциональный подходы • Используется в Linkedin, Twitter, Foursquare, Coursera. • SBT – система сборки проектов на Scala и Java. • Автоматическое разрешение зависимостей (Ivy) • Инкрементальная компиляция кода на Scala и Java • Поддержка расширений и задач на Scala • Интерактивное управление (консоль команд) 2/13
  4. SCALA И SBT • Scala – язык программирования для JVM.

    • Совмещает объектно-ориентированный и функциональный подходы • Используется в Linkedin, Twitter, Foursquare, Coursera. • SBT – система сборки проектов на Scala и Java. • Автоматическое разрешение зависимостей (Ivy) • Инкрементальная компиляция кода на Scala и Java • Поддержка расширений и задач на Scala • Интерактивное управление (консоль команд) • sbt-remote-control – проект позволяющий запускать SBT в режиме сервера и посылать ему команды удаленно. Используется в Typesafe Activator 2/13
  5. ПОДДЕРЖКА SBT В СРЕДАХ РАЗРАБОТКИ • Расширения-генераторы • Расширения для

    SBT генерирующие (по запросу) файлы необходимые для открытия проекта в соответствующей среде разработки • Гибкие в настройке, но при изменении проекта SBT надо все перегенерировать вручную 3/13
  6. ПОДДЕРЖКА SBT В СРЕДАХ РАЗРАБОТКИ • Расширения-генераторы • Расширения для

    SBT генерирующие (по запросу) файлы необходимые для открытия проекта в соответствующей среде разработки • Гибкие в настройке, но при изменении проекта SBT надо все перегенерировать вручную • Встроенная поддержка SBT в IDEA • Не требует дополнительной настройки • Автоматически обновляет проект IDEA при изменении параметров проекта SBT 3/13
  7. АКТУАЛЬНЫЕ ПРОБЛЕМЫ ПОДДЕРЖКИ SBT • Корень проблем: не все проекты

    SBT могут быть представлены проектом IDE из-за ограничений самой IDE 4/13
  8. АКТУАЛЬНЫЕ ПРОБЛЕМЫ ПОДДЕРЖКИ SBT • Корень проблем: не все проекты

    SBT могут быть представлены проектом IDE из-за ограничений самой IDE • Проблема 1: некорректное поведение во время редактирования 4/13
  9. АКТУАЛЬНЫЕ ПРОБЛЕМЫ ПОДДЕРЖКИ SBT • Корень проблем: не все проекты

    SBT могут быть представлены проектом IDE из-за ограничений самой IDE • Проблема 1: некорректное поведение во время редактирования • Проблема 2: некорректные компиляция и/или тестирование средствами IDE 4/13
  10. АКТУАЛЬНЫЕ ПРОБЛЕМЫ ПОДДЕРЖКИ SBT • Корень проблем: не все проекты

    SBT могут быть представлены проектом IDE из-за ограничений самой IDE • Проблема 1: некорректное поведение во время редактирования • Проблема 2: некорректные компиляция и/или тестирование средствами IDE • Решается делегированием этих задач SBT! 4/13
  11. ЦЕЛЬ РАБОТЫ Создать расширение для IntelliJ IDEA иcпользующее sbt-remote-control для:

    • Импорта проекта: извлечения списка модулей, библиотек и зависимостей между ними • Компиляции проекта • Выполнения любыx другиx команд SBT (интерактивная консоль) 5/13
  12. ЗАДАЧИ • Изучение архитектуры и программного интерфейса IntelliJ IDEA и

    sbt-remote-control • Проектирование архитектуры расширения • Реализация расширения • Интеграция с расширением IntelliJ Scala 6/13
  13. ОСОБЕННОСТИ SBT-REMOTE-CONTROL • Архитектура sbt-remote-control асинхронная new Connector().connect { client

    => client.watchBuild { build => client.watchKey(sourceDirectories in build) { dirs => ... } client.requestExecution("compile") ... } } • Для параметров проекта предусмотрена подписка: при изменении параметра вызывается функция-callback • Остальные запросы (выполнение задач, автодополнение и пр.) возвращают Future[T] 7/13
  14. АРХИТЕКТУРА РАСШИРЕНИЯ Менеджер подключений Подсистема импорта Cостояниe проекта Логгер сессии

    Все запросы/ответы Интерактивная консоль Сообщения лога Команды 8/13
  15. АРХИТЕКТУРА РАСШИРЕНИЯ Менеджер подключений Подсистема импорта Cостояниe проекта Логгер сессии

    Все запросы/ответы Интерактивная консоль Сообщения лога Команды Плагин компиляции (в отдельном процессе) 8/13
  16. ПОДСИСТЕМА ИМПОРТА: ЗАДАЧА И УСЛОВИЯ • Задача: спроектировать архитектуру и

    реализовать подсистему импорта с учетом следующих условий 9/13
  17. ПОДСИСТЕМА ИМПОРТА: ЗАДАЧА И УСЛОВИЯ • Задача: спроектировать архитектуру и

    реализовать подсистему импорта с учетом следующих условий • Условие 1: разбить алгоритм построения проекта IDE на части с возможностью подключения/отключения различных частей при определенных условиях 9/13
  18. ПОДСИСТЕМА ИМПОРТА: ЗАДАЧА И УСЛОВИЯ • Задача: спроектировать архитектуру и

    реализовать подсистему импорта с учетом следующих условий • Условие 1: разбить алгоритм построения проекта IDE на части с возможностью подключения/отключения различных частей при определенных условиях • Условие 2: по возможности использовать IDEA External System, но обеспечить простой переход от нее к работе с сервисами IDEA напрямую 9/13
  19. ПОДСИСТЕМА ИМПОРТА: EXTRACTOR trait Extractor { def attach(client: SbtClient, project:

    Project): (Future[Unit], Subscription) } • Наследники инкапсулируют определенную часть алгоритма генерации 10/13
  20. ПОДСИСТЕМА ИМПОРТА: EXTRACTOR trait Extractor { def attach(client: SbtClient, project:

    Project): (Future[Unit], Subscription) } • Наследники инкапсулируют определенную часть алгоритма генерации • Позволяет подключаться/отключаться при необходимости 10/13
  21. ПОДСИСТЕМА ИМПОРТА: EXTRACTOR trait Extractor { def attach(client: SbtClient, project:

    Project): (Future[Unit], Subscription) } • Наследники инкапсулируют определенную часть алгоритма генерации • Позволяет подключаться/отключаться при необходимости • Работа с проектом через собственный интерфейс Project позволяет организовать работу как через External System, так и напрямую с сервисами IDEA 10/13
  22. РЕЗУЛЬТАТЫ • Cпроектировано и реализовано расширение для IntelliJ IDEA на

    языке Scala (https://github.com/dancingrobot84/intellij-sbt-remote) • В sbt-remote-control были внесены дополнения и исправления (информация о внутренних зависимостях проекта, используемых расширениях SBT и прочее) 12/13
  23. РЕЗУЛЬТАТЫ • Cпроектировано и реализовано расширение для IntelliJ IDEA на

    языке Scala (https://github.com/dancingrobot84/intellij-sbt-remote) • В sbt-remote-control были внесены дополнения и исправления (информация о внутренних зависимостях проекта, используемых расширениях SBT и прочее) • Архитектура подсистемы импорта была частично перенесена в расширение IntelliJ Scala 12/13