В первой статье из цикла «Как жить без IntelliJ IDEA» мы рассмотрели альтернативы привычной нам IDE как таковой. TL;DR: по мнению команды Spring АйО проще собрать IntelliJ IDEA Community самостоятельно (если все возможные пути легального скачивания будут заблокированы), чем пересаживаться на что-то другое (VS Code, NetBeans, Eclipse).
Если первая статья была сконцентрирована именно на IDE как таковой и всех её возможностях в целом, к которым разработчики привыкли за последние десятилетия, то в следующих статьях из этого цикла мы сделаем акцент на более конкретных возможностях IDE. Начнем, конечно же, с поддержки Spring.
Содержание
Не смотря на то, что в предыдущей статье мы решили оставаться на IntelliJ IDEA, не стоит забывать, что в Community версии нет поддержки Spring от слова совсем. Прекрасный повод дать ещё один шанс IDE не от компании JetBrains, не так ли?
А что есть поддержка Spring?
Но прежде чем приступить к обзору, нужно определить критерии оценивания. В качестве отправной точки возьмем лэндинг IntelliJ IDEA Ultimate, описывающий поддержку Spring и дополним его фичами, к которым все давно привыкли:
Создание Spring Boot приложения (альтернатива https://start.spring.io/)
Умные автодополнения в контексте Spring
Инспекции и быстрые исправления
Навигация по Spring модели
Диаграмма зависимостей между бинами
Отображение доступных эндпоинтов приложения в одном месте
Поддержка application.properties/.yaml
Поддержка JPA (Spring Data, JPQL)
Поддержка Kotlin
Последний, десятый пункт давайте назовём «Общее впечатление». Как‑никак, довольно высока вероятность, что общее впечатление от того или иного решения будет зависеть от множества факторов, в том числе от фич, которых может и не быть в Ultimate версии IntelliJ IDEA.
Spring Tools Suite 4
Spring Tools 4 — это инструмент, который рекомендуют использовать сами разработчики Spring Framework. С другой стороны, рекомендуют — не значит, что используют сами. Во время публичных выступлений контрибьюторы Spring Framework постоянно используют именно IntelliJ IDEA, а не любую другую IDE со Spring Tools Suite. Вот несколько примеров: Juergen Hoell, Josh Long, Daniel Garnier‑Moiroux, Stéphane Nicoll, и т. д.
Инструмент представлен в нескольких вариациях — для VS Code, Eclipse и Theia (можно сказать, тот же VS Code).
Учитывая, что SpringTools работает по технологии LSP, функциональность в Eclipse и VS Code будет одинаковой в точности до UI/UX этих IDE, поэтому мы рассмотрели VS Code версию этого инструмента.
На хабре уже была статья про Java разработку на VS Code, но без упора на Spring. Постараемся закрыть этот пробел.
Устанавливается Spring Tools 4 на VS Code буквально в 2 клика. Предлагается установить Spring Boot Extension Pack — набор сразу из 3 расширений:
Spring Initializr Java Support — название говорит само за себя
Spring Boot Tools — собственно, языковая поддержка application.properties, application.yaml и.java файлов
Spring Boot Dashboard — панелька для отображения проектов, бинов и эндпоинтов
1. Создание Spring Boot приложения
Для разработчиков, привыкших к IntelliJ IDEA, будет несколько непривычным способ запуска различной функциональности в VS Code - через Command Palette
. Жмём специальный hotkey (на OS X это Command + Shift + A
) и получаем окошко, в которое вводим название команды.
Похоже на Shift-Shift из IDEA, но в данном случае это буквально единственный способ доступа к Spring Initializr.
После этого начинается долгое путешествие по таким же попапчикам, в которых надо выбрать все то, что обычно мы вводим на https://start.spring.io/. Особенно интересно выглядит окошко для выбора зависимостей. В принципе, каких-то сложностей такой UI не вызывает, но нужно быть осторожным и случайно его не закрыть. Честно говоря, создание проекта через https://start.spring.io/ выглядит проще.
Много картинок
Как и ожидалось, проект успешно создался.
2. Умные автодополнения в контексте Spring
Начнём с базовых автодополнений. Кажется, комплишн только префиксный, что непривычно, по сравнению с IntelliJ IDEA.
Здесь мы пытались добавить аннотацию @ConfigurationProperties
(помню, что Properties должно быть в названии), но таким образом ее не найти, что печально. Однако в некоторых случаях комплишн работает привычным нам способом:
В rest контроллерах есть достаточно удобные комплишены, которые разворачивают что-то вроде Live Templates (тут они называются snippets).
Есть комплишн cron выражений в @Scheduled
, и даже его расшифровка.
Никакой специальной поддержки в MapStruct мапперах найти не удалось, как и стороннего расширения для него.
Также не можем не отметить работу с build.gradle
. Видим подсветку синтаксиса, однако, автодополнения оставляют желать лучшего. Скажем честно, специализированной поддержки для Gradle просто нет.
Для Gradle можно поставить отдельный extension, что очень советуем сделать. Поддержка непосредственно билд скрипта будто бы лучше не стала, но появляется отдельная панелька с возможностью вызвать gradle таски.
3. Инспекции и быстрые исправления
Инспекций, быстрых исправлений или другой похожей функциональности в VS Code мы не обнаружили.
4. Навигация по Spring модели
Инструмент подсвечивает все бины рядом с номером строки в редакторе, но практической пользы от этого, кажется, никакой. Навигироваться по модели получится только с использованием отдельного окна, про который поговорим в следующем абзаце.
5 и 6. Диаграмма зависимостей между бинами и отображение доступных эндпоинтов приложения в одном месте
Панелька Spring Boot Dashboard, о которой говорили в начале, состоит из трех частей: список всех бинов, список всех эндпоинтов и список всех классов, отмеченных аннотацией @SpringBootApplication
. К первым двум можно навигировать, третий - запускать.
При этом можно указать активный профиль.
Приложение запускается, что не удивительно. Но вот дебаггер оставляет желать лучшего. В Watch нет комплишена!
Зато есть вкладка DEBUG CONSOLE. Теперь это ваши Watches.
Пользоваться можно, но UX далек от IDEA.
7. Поддержка application.properties
Нормальный комплишн по пропертям и даже по некоторым свойствам.
Навигации к классам из значений свойств, к сожалению, нет, но можно навигироваться к классу @ConfigurationProperties
. Только почему-то, не из моего проекта. По всей видимости, поддержка сделана на основе spring-configuration-metadata.json, который обычно не создают для локальных проектов.
8. Поддержка JPA (Spring Data, JPQL)
Не самая плохая поддержка в Spring Data репозиториях. Есть подсветка JPQL запросов и даже некоторая навигация, но без комплишнов. Также есть подсказки для создания derived методов, но работает не очень стабильно. Для каких-то методов в конце предлагает сгенерировать возвращаемый тип и параметры, а в каких-то нет. Комплишн по дочерним свойствам не работает.
9. Поддержка Kotlin
Когда мы создавали проект, обратили внимание, что можно выбрать язык — Java, Kotlin и Groovy. С Java все понятно, Groovy уже мало кого интересует, а вот что с Kotlin? Проект действительно создается (неудивительно), но не запускается средствами Spring Tools. Возникает ошибка No main class is found. Подсветка синтаксиса работает, но человеческий комплишн отсутствует.
10. Общее впечатление
Проект неплохой и местами даже имеет функции, отсутствующие в IDEA Ultimate. Например, есть возможность прямо в коде увидеть, какой реальный бин заавтовайрился.
С другой стороны, UX VSCode далек от UX IntelliJ IDEA. Разработчикам точно придется переучиваться и привыкать. Рефакторинги через не модальный и не функциональный попап, пожалуй, одна из самых неудобных вещей. До дебаггера IntelliJ IDEA уж совсем как до луны. Поддержка Kotlin тоже никуда не годится.
Итого:
Фича | Краткий итог |
Создание Spring Boot приложения | Работает, но пользоваться крайне неудобно (5/10) |
Умные автодополнения в контексте Spring | Те что есть работают неплохо, но их мало в сравнении с Ultimate (5/10) |
Инспекции и быстрые исправления | Практически полное отсутствие (0/10) |
Навигация по Spring модели | Иконки есть, но не для навигации; есть отдельная панель со всеми бинами (2/10) |
Диаграмма зависимостей между бинами | Как таковой зависимости между бинами увидеть не получится, но список всех бинов есть (6/10) |
Отображение доступных эндпоинтов приложения в одном месте | Эндпоинты отображаются, но сгруппировать их никак нельзя (8/10) |
Поддержка application.properties/.yaml | Сравнима с Ultimate, но иногда работает не так, как ожидается (8/10) |
Поддержка JPA (Spring Data, JPQL) | Поддержка неплохая, но в Ultimate сильно лучше (5/10) |
Поддержка Kotlin | Работает, но плохо (2/10) |
Общее впечатление | Есть классные локальные фичи, но отсутствие привычного UX сильно мешает (3/10) |
Общий результат 42 балла из 100.
NetBeans
Рассмотрим еще одну IDE, с которой наверняка знакомы все олды. Для NetBeans также имеется плагин для Spring. Судя по истории коммитов, проект перестал развиваться в 2020 году. Но раз мы решили смотреть альтернативы IntelliJ IDEA Ultimate, то стоит идти до конца). Поддержка фреймворка достаточно скудная, поэтому не будем долго здесь задерживаться и перечислим интересующие нас возможности не по порядку.
Плагин имеет функциональность по созданию Spring проекта через Spring Initializr, но почему-то поддерживает только Maven.
Есть простенький комплишн в application.properties
.
Но работает не везде. Есть подозрение, что зависит от того, использует ли проект Maven или Gradle. Мы не стали тратить много времени на проверку этой гипотезы, но одно ясно - поддержка имеет проблемы.
Есть шаблоны для создания различных классов и файлов Spring. Однако, никакая тонкая настройка этих файлов не предлагается, а длина пути, по которому нужно пройти, чтобы выбрать шаблон, делает это функцию практически бесполезной. Поставить аннотацию сильно быстрее, чем пройтись через несколько диалоговых окон.
Заявлена некоторая панель для отображения эндпоинтов @Controller
/@RestController
, но, честно говоря, найти её не удалось. Знатоки NetBeans, пишите в комментариях, где ее найти.
В коде мы не нашли никакой особенной поддержки фреймворка. Нет комплишенов в репозиториях, нет подсветки jpql/sql запросов, нет навигации, нет никаких инспекций. Интересная особенность NetBeans — он вообще не помечает методы как unused. Соответственно, платину не нужно их «разотмечать». Практически вин-вин :D.
Есть некоторая интеграция с Spring Dev Tools, которая сводится к кнопке Spring Boot Restart.
Какая-либо языковая поддержка gradle скриптов отсутствует, но зато есть возможность выполнять gradle таски.
На этом хочется закончить обзор этого инструмента. Мы приходим к выводу, что NetBeans скорее мертв, чем жив. Этот некогда популярный инструмент, кажется почти не развивался последние 20 лет. По крайней мере у нас возникло ощущение, что мы вскрыли капсулу времени. Плагин для поддержки Spring абсолютно точно не развивался последние 4 года, да и видимо, никогда больше не будет.
Итого:
Фича | Краткий итог |
Создание Spring Boot приложения | Работает хорошо, но не поддерживает Gradle (5/10) |
Умные автодополнения в контексте Spring | Отсутствуют (0/10) |
Инспекции и быстрые исправления | Отсутствуют (0/10) |
Навигация по Spring модели | Отсутствует (0/10) |
Диаграмма зависимостей между бинами | Отсутствует (0/10) |
Отображение доступных эндпоинтов приложения в одном месте | Вроде как есть, но найти не представляется возможным (2/10) |
Поддержка application.properties/.yaml | Работает, но не навигируется к месту использования (8/10) |
Поддержка JPA (Spring Data, JPQL) | Отсутствует (0/10) |
Поддержка Kotlin | Отсутствует (0/10) |
Общее впечатление | Отсутствует (0/10) |
Общий результат 10 баллов из 100.
Community IDEA
И вот мы вернулись к тому, с чего начали. Как мы уже говорили, в IntelliJ IDEA Community Edition нет поддержки Spring от слова «совсем». Можно, конечно, пойти дорогой истинного самурая и попытаться настроить её самостоятельно, отключив все false-positive подсказки от IntelliJ IDEA. Однако в таком случае, мы всё равно не получим ни одну из фич, которую нам бы хотелось. Но получить обозначенные выше возможности можно. Для этого придется установить расширения (плагины). Давайте рассмотрим некоторые из них.
Плагины из JetBrains маркетплейс
Погрузившись в JetBrains Marketplace с запросом «Spring», можно найти десяток плагинов, содержащих это слово в названии. Однако при ближайшем рассмотрении становится ясно, что ни один из них не предлагает комплексной поддержки Spring.
Spring Boot Assistant
Есть, например, популярный плагин Spring Boot Assistant, который облегчает работу с application.properties
и .yaml
файлами.
Кстати, этот же плагин предустановлен в Giga IDE, и на данный момент это единственная поддержка Spring в Giga IDE, которую нам удалось обнаружить. Поэтому отдельно рассматривать Giga IDE в этой статье не будем.
Start Spring Boot Project
Другой плагин — Start Spring Boot Project: он просто открывает start.spring.io внутри IDE, позволяя создавать Spring Boot проекты прямо из интерфейса.
JPA Buddy
Не можем не отметить плагин JPA Buddy, часть возможностей которого, а именно поддержка JPA и Spring Data JPA, доступна бесплатно.
Мы можем создавать, редактировать и исследовать JPA сущности, Spring Data JPA репозитории, а также derived
и @Query
методы.
Поддержки JPQL плагин не предоставляет.
Остальные более-менее популярные плагины (с >10k скачиваний) либо предоставляют примерно такие же возможности, либо предлагают частичную поддержку отдельных Spring элементов. Отметим факт потенциальных возможностей, которые в теории можно найти символическими 3 баллами в графе «Общее впечатление».
Итого:
Фича | Краткий итог |
Создание Spring Boot приложения | Работает, но браузер в IDE – такое себе (8/10) |
Умные автодополнения в контексте Spring | Отсутствуют (0/10) |
Инспекции и быстрые исправления | JPA Buddy предоставляет инспекции, связанные именно с JPA, но не со Spring в целом (2/10) |
Навигация по Spring модели | Отсутствует, есть навигация только по JPA модели (2/10) |
Диаграмма зависимостей между бинами | Отсутствует (0/10) |
Отображение доступных эндпоинтов приложения в одном месте | Отсутствует (0/10) |
Поддержка application.properties/.yaml | Такая же, как и в Ultimate (10/10) |
Поддержка JPA (Spring Data, JPQL) | Поддержка есть, но полная. Например, нет поддержки JPQL (7/10) |
Поддержка Kotlin | Так как это IntelliJ IDEA, поддержку Kotlin мы получаем из коробки (10/10) |
Общее впечатление | Потенциально необнаруженные полезные плагины и тот факт, что это привычная нам IDE (5/10) |
Общий результат 44 балла из 100.
Amplicode
Amplicode предоставляет инструменты для эффективной разработки веб-приложений и сервисов на Spring Boot, а также административного интерфейса на React Admin. Плагин от российских разработчиков, поэтому из официального маркетплейса JetBrains его не скачать. Нужно будет указать кастомный.
1. Создание Spring Boot приложения
Такой возможности Amplicode не предоставляет, во всех маркетинговых материалах на сайте и YouTube производится доработка существующего приложения, либо создание нового на https://start.spring.io/.
2. Умные автодополнения в контексте Spring
Есть live templates для создания методов в контроллерах:
Инжекция бинов в класс после набора названия бина в методе работает также, как и в последних версиях IntelliJ IDEA Ultimate.
Печатаем название бина и нажимаем Enter:
Получаем его инжекцию в текущий бин:
Схожая по принципу поддержка с автодополнениями есть и для MapStruct. Начинаем печатать mapTo
на доменном объекте или коллекции объектов:
Нажимаем Enter, инжектируется маппер, и скафолдится код для маппинга:
3. Инспекции и быстрые исправления
Amplicode предоставляет не все инспекции, что есть в IntelliJ IDEA Ultimate, но довольно много. У нас получилось насчитать 31 инспекцию. Многие из них связаны с JPA, другие именно со Spring или связанными технологиями:
4. Навигация по Spring модели
Навигация по Spring модели осуществляется схожим с IntelliJ IDEA Ultimate образом, через иконку рядом с названием бина. При этом, Amplicode показывает зависимости транзитивно и в две стороны:
5. Диаграмма зависимостей между бинами
Диаграммы зависимостей как таковой Amplicode не предоставляет. Однако стоит отметить, что представленная выше фича с возможностью просмотра заинжектированных бинов может частично заменить диаграмму.
Для изучения самого проекта Amplicode предлагает панель Amplicode Explorer, в которой можно посмотреть на различные части Spring Boot приложения. От добавленных в проект конфигураций и до файлов развертывания:
6. Отображение доступных эндпоинтов приложения в одном месте
В описанной выше панели Amplicode Explorer есть отдельная группа Endpoints, в которой можно найти все эндпоинты и перейти к ним. Визуальное отображение можно настроить: по пути, по контроллерам или в плоском виде:
7. Поддержка application.properties/.yaml
Amplicode предоставляет автодополнения во время набора кода в файлах application.properties
и application.yaml
ровно также, как и IntelliJ IDEA Ultimate:
Также есть возможность изменять и исследовать возможные значения в другой панели – Amplicode Designer:
8. Поддержка JPA (Spring Data, JPQL)
Так как Amplicode разрабатывает та же команда, что и JPA Buddy, все возможности, которые были в нём, и в том числе те, что теперь входят в состав IntelliJ IDEA Ultimate, доступны и в Amplicode.
Поэтому всё, что связано с JPA Buddy и было описано выше, есть в Amplicode (создание JPA сущностей, Spring Data репозиториев, derived
и @Query
методов). Помимо этого, есть поддержка JPQL:
И автодополнения во время набора derived
методов как в IntelliJ IDEA Ultimate:
9. Поддержка Kotlin
Все возможности, описанные выше, также работают и в Kotlin проектах.
10. Общее впечатление
IntelliJ IDEA CE вместе с Amplicode очень сильно напоминает Ultimate во многих аспектах. Местами некоторых фич не хватает: всё того же Spring Initializer, например. Также расстраивает отсутствие поддержки XML-конфигураций, хотя с другой стороны кажется, что на данный момент они не пользуются большой популярностью. Кроме того, есть возможности, которых нет в Ultimate, но которые выглядят интересно. Например, генерация Docker Compose сервисов и делегация методов из одних Spring-объектов в другие.
Итого:
Фича | Краткий итог |
Создание Spring Boot приложения | Отсутствует (0/10) |
Умные автодополнения в контексте Spring | Аналогично Ultimate (10/10) |
Инспекции и быстрые исправления | Присутствуют, но меньше чем в Ultimate (8/10) |
Навигация по Spring модели | Навигация отличается от Ultimate, но задачу решает аналогично (9/10) |
Диаграмма зависимостей между бинами | Отсутствует, но есть своё представление проекта и зависимостей между бинами (7/10) |
Отображение доступных эндпоинтов приложения в одном месте | Есть. В отличие от Ultimate присутствует возможность настроить группировку (10/10) |
Поддержка application.properties/.yaml | Такая же, как и в Ultimate (10/10) |
Поддержка JPA (Spring Data, JPQL) | Такая же, как и в Ultimate (10/10) |
Поддержка Kotlin | Так как это IntelliJ IDEA, поддержку Kotlin мы получаем из коробки. А все возможности Amplicode работают как в Java, так и в Kotlin проектах (10/10) |
Общее впечатление | Можно сказать, что все жизненно важные фичи Ultimate Amplicode замещает (хоть и не все), но также и привносит свои (8/10) |
Общий результат 82 балла из 100.
Заключение
Подводя итог, альтернативы IntelliJ IDEA Ultimate в части поддержки Spring есть! Местами возможности альтернативных решений реализованы хуже, местами также, а где-то даже лучше. В любом случае кажется, что совсем без поддержки Spring мы не остались, и это радует!
Подведем итоги:
Название инструмента | Количество баллов |
Spring Tool Suite (VS Code, Eclipse) | 42 |
NetBeans + Spring Boot Plugin | 10 |
IntelliJ IDEA CE + Spring Boot Assistant + Start Spring Boot Project + JPA Buddy | 44 |
IntelliJ IDEA CE + Amplicode | 82 |
В следующей статье из цикла «Как жить без IntelliJ IDEA» мы расскажем, какие есть альтернативы DataGrip, отдельной IDE, встроенной в IntelliJ IDEA Ultimate.
Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.
Ждем всех, присоединяйтесь