Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Как вы наверняка знаете, Swing — это фреймворк, позволяющий разрабатывать графические интерфейсы для приложений на платформе Java. IDE JetBrains используют Swing для отрисовки интерфейсов. Также Swing применяется и в других IDE на базе IntelliJ, например, в Android Studio.
IDE JetBrains и приложения на Swing — десктопные приложения, и, в целом, это плюс. Однако бывают случаи, которые требуют иного подхода (например, тонкий клиент). И именно здесь нам пригодится Projector.
Projector — это технология, с помощью которой вы запускаете IDE на базе IntelliJ либо Swing-приложения на сервере. Далее вы можете подключаться к ним откуда угодно, используя браузеры или нативные приложения.
![](https://habrastorage.org/getpro/habr/upload_files/c6d/2e5/6a0/c6d2e56a0deb721aead5a872d3afb83f.png)
Сценарии использования
Есть множество ситуаций, требующих запуска IDE на сервере. Некоторые из них типичны для больших компаний, располагающих огромной инфраструктурой. Вот краткий список ситуаций, в которых вам может помочь Projector:
Вы хотите запускать код рядом с вычислительными серверами или базой данных.
Корпоративная среда требует повышенной безопасности.
У вас очень объемный проект.
Запрещено локальное копирование исходного кода.
Физическое устройство со стороны клиента очень ограничено в ресурсах.
Вы работаете с тонким клиентом.
Вам необходимо запускать IDE в среде GNU/Linux на Windows-устройствах либо в нестандартных операционных системах, таких как ChromeOS.
Вам необходимо выключать компьютер, пока приложение запущено на сервере.
Вы выполняете удаленную отладку на сервере (devtest, devprod).
Вы используете образы для виртуальных машин или Docker, включающие отладочные исходники и предустановленную IDE.
Используемая конфигурация требует удаленного доступа.
Стоит отметить, что Projector не поддерживает совместную разработку. Если вам нужен инструмент для совместной разработки, попробуйте Code With Me. Также мы работаем над новым решением для удаленной разработки, которое объединит функциональность Code With Me и Projector. Это поможет в решении проблемы задержек сети.
Open Source
В исходном коде Projector используются лицензии, принятые в сообществах разработчиков Open Source и Free Software. Это важно для компаний, которые хотели бы использовать данную технологию для создания собственных решений. Мы пользуемся тремя наиболее популярными видами лицензий:
Клиент: лицензия MIT (Expat)
Сервер: GNU GPL v2.0 + Classpath Exception
Dockerfiles: лицензия Apache 2.0
Вы также можете принять участие в создании новой функциональности и устранении ошибок, создавая собственные пул-реквесты GitHub. Ниже вы найдете ссылки на проекты в GitHub.
Архитектура
Projector — это клиент-серверное ПО. Вы запускаете IDE на сервере, а затем подключаетесь к ней по сети. Соединение между клиентом и сервером очень легковесное и высокоскоростное.
Projector похож на системы удаленного доступа к рабочему столу, такие как VNC. Отличие в том, что Projector отображает лишь окна IDE и обеспечивает максимальную скорость отрисовки для Java-приложений.
Projector предлагает несколько вариантов настройки клиента и сервера.
Клиентские приложения
Чтобы подключиться к IDE, вы можете использовать либо браузер, либо нативное приложение. В нативном приложении больше функциональности (например, вы можете использовать горячие клавиши, недоступные при работе из браузера). Для работы с мобильного устройства необходимо использовать браузер, однако в будущем мы планируем запустить нативные клиенты также и для мобильных платформ.
Веб-клиент
Работа из браузера напоминает использование интерактивного веб-сайта. При этом можно переключить браузер в полноэкранный режим, и работать в нем как в полноценном десктопном приложении.
Настройки веб-клиента изменяются через параметры URL. К примеру, на мобильных устройствах можно добавить в URL параметр "mobile" — это включит панель-оверлей с дополнительными кнопками (в частности, здесь есть кнопка, позволяющая открыть виртуальную клавиатуру).
Веб-клиент реализован при помощи HTML5 Canvas API — он работает в любом браузере, совместимом с этим API. Веб-клиент протестирован в Chrome/Chromium, Firefox и Safari.
Устанавливать веб-клиент не нужно (он уже включен в веб-сервер Projector) — вам просто нужно ввести соответствующий адрес в браузерную строку. Весь код доступен на GitHub.
Нативное приложение
Вы можете использовать нативное приложение для macOS, Windows и Linux. Скачать бинарные файлы можно здесь. Исходный код опубликован на GitHub.
Приложение включает интеграцию с Dock/Taskbar и множество других ожидаемых возможностей. Также оно поддерживает сочетания клавиш, такие как, например, Ctrl+W/Cmd+W (в отличие от браузерного клиента, который их, как правило, не поддерживает).
Сервер
Установочный скрипт (Python)
Использование скрипта установки обеспечивает максимальную гибкость. Он позволяет выбрать желаемую IDE, а также ее версию, параметры безопасности и др. В данный момент он доступен только для GNU/Linux.
Образы Docker
Запустить Projector в облачной среде проще всего через Docker. Данный пример скрипта позволяет генерировать образы Docker, в которые запакованы различные IDE от JetBrains и компоненты Projector. Таким образом вы сможете запускать IDE везде, где доступен Docker. IDE будет выполняться в изолированной среде, независимо от других приложений на сервере и без физического экрана. Вам даже не нужно устанавливать X11. Образ уже содержит в себе все необходимое.
Мы не используем DockerHub и публикуем предварительно собранные образы через собственный Docker Registry. Ниже вы видите пример строки, позволяющий получить IntelliJ IDEA Community Edition:
docker pull registry.jetbrains.team/p/prj/containers/projector-idea-c
Плагин для IDE
В качестве альтернативы вы можете просто установить в IDE плагин Projector, избегая необходимости развертывания отдельного сервера. В таком случае в роли сервера выступит ваше собственное устройство. Как обычно, исходный код доступен на GitHub.
Однако плагин менее изолирован, поэтому для него важна используемая операционная система и ее настройки. Например, он не сможет отображать глобальное меню, характерное для macOS.
Попробуйте сами
Projector — это скорее технология. Вы можете использовать Projector для настройки собственной инфраструктуры, чтобы точнее удовлетворить потребности вашего бизнеса. Ansible? Конечно. Kubernetes? Нет проблем.
При наличии соответствующих технических навыков вы сможете собрать все что угодно. Код Projector — открытый. Вы можете изменить в нем все что угодно и даже стать контрибьюторами. Более подробную информацию и сам код вы найдете на GitHub.
Projector — очень молодая технология. Однако на наш взгляд, она может стать одним из лучших решений для удаленного доступа к IDE. Мы очень ждем ваших отзывов. Вы всегда можете связаться с нами через YouTrack или Twitter.
— Команда Projector