20 August 2024

Как превратить IntelliJ IDEA Community Edition в Ultimate за 3 простых шага

На российском рынке сложилась сложная ситуация с IDE для Java-разработчиков. IDE, с которой программисты работали более 20 лет, больше недоступна для скачивания. Речь идет, конечно же, об IntelliJ IDEA Ultimate. У одних она всё ещё установлена, но срок действия лицензии скоро истечет. У других есть версия с пожизненной лицензией, но без возможности обновления — обычно это версии 2022 и 2023 годов. Есть и те, кто находит способы приобретать IntelliJ IDEA Ultimate и сейчас, но я не буду их упоминать, так как они чаще всего нарушают лицензию или противозаконны.

Несмотря на уход IntelliJ IDEA Ultimate из РФ, многие разработчики пока не сталкиваются с проблемами. Но как долго это будет продолжаться? Уже сейчас те, кто сидят на версиях 2022 и 2023 годов могут испытывать трудности с последними версиями Java и популярных фреймворков, таких как Spring Boot. Также в затруднительной ситуации находятся и те, у кого скоро истечет лицензия. Возникают вопросы, на которые не у всех есть ответы: как жить без IntelliJ IDEA Ultimate, без её умных рефакторингов, подсветки кода и других возможностей?

На самом деле, всё не так страшно. В этой статье я расскажу, как использовать IntelliJ IDEA Community Edition, несколько бесплатных плагинов и сторонних инструментов, которые помогут вам практически не заметить отсутствия IntelliJ IDEA Ultimate.

А что мы потеряли?

Чтобы понять, как жить дальше, сначала нужно разобраться, что именно мы потеряли. Напомню, что недоступной стала только IntelliJ IDEA Ultimate. Однако у компании JetBrains есть ещё одна IDE — IntelliJ IDEA Community Edition. Это полностью бесплатная и open-source IDE, которую можно даже собрать самостоятельно, если возникнет такая необходимость.
Важно отметить, что многие функции, доступные в IntelliJ IDEA Ultimate, также присутствуют в IntelliJ IDEA CE. Обе версии можно рассматривать как наборы плагинов, объединённых в один bundle. В одном bundl’е плагинов больше, в другом — меньше. При этом некоторые из предустановленных в Ultimate плагинов мы без проблем можем установить в CE, но некоторые не можем. Получается, мы потеряли не всё, а только часть возможностей. Давайте разберёмся, какие именно.

1. Поддержка Java и Kotlin в обеих версиях включает подсветку кода, выявление синтаксических ошибок и автодополнения.
2. Обе IDE предлагают рефакторинг кода, позволяя переименовывать методы, классы и пакеты, а также выносить и инлайнить методы.
3. Инспекции и подсказки по улучшению кода также присутствуют и там и там, хотя в Ultimate их больше и есть специфичные именно для фреймворков, таких как Spring.
4. Обе версии поддерживают Git.
5. И наиболее популярные системы сборки Maven и Gradle.
6. Также обе версии содержат дебаггер. Хотя в Ultimate он более продвинутый и включает поддержку реактивного стека.
7. А вот работать с базами данных из коробки может только IntelliJ IDEA Ultimate.
8. Также в состав Community Edition не входит HTTP клиент.
9. Пожалуй, самое важное, чего нет в Community Edition – поддержки Spring Framework. Любой проект на Spring или на Spring Boot будет выглядеть как куча “неиспользуемого” кода с точки зрения Community Edition, ведь она будет смотреть на него исключительно как на Java-код, ничего не зная о тонкостях фреймворка.
10. Последний, десятый пункт я оставлю свободным для заполнения, так как в IntelliJ IDEA Ultimate есть ещё много функций, но все они не так востребованы широким кругом разработчиков. К ним можно отнести инструменты профилирования, поддержку Kubernetes, удалённую разработку (Remote Development), поддержку фронтенд-языков программирования и другие. Если я что-то забыл упомянуть, не стесняйтесь писать об этом в комментариях :)
Итого:

Возможности IntelliJ IDEA Ultimate IntelliJ IDEA Community Edition
1. Java/Kotlin + +
2. Рефакторинги + +
3. Инспекции + +
4. Git + +
5. Gradle/Maven + +
6. Debugger + (есть поддержка Reactive Streams) +
7. Database Tools + -
8. HTTP Client + -
9. Spring Framework + -
10. Up to you :) + -

Ниже расскажу, как бесплатно, без регистрации и без смс получить фичи, казалось бы “уникальные” для IntelilJ IDEA Ultimate в бесплатной IntelliJ IDEA Community Edition.

Работа с базами данных

Database Navigator

Database Navigator является одним из самых популярных плагинов в JetBrains Marketplace. На момент написания статьи, его скачали более 4 миллионов раз.

Database Navigator — это open-source альтернатива плагину Database Tools and SQL, который представляет собой другую довольно популярную IDE от JetBrains – DataGrip в формате плагина.

Из-за отсутствия хоть какой-то документации у Database Navigator, провести детальное сравнение сложно, так как есть риск упустить что-то важное. Поэтому рассмотрим основные функции, с которыми я сталкивался в IntelliJ IDEA Ultimate.

Поддерживаемые базы данных

По сравнению с DataGrip, Database Navigator поддерживает меньшее количество баз данных, но среди них — самые популярные SQL СУБД: Oracle, MySQL, SQLite, PostgreSQL. Также в числе поддерживаемых баз данных разработчик написал “Any JDBC compliant database (EXPERIMENTAL)”. Так что в теории уже сейчас можно попробовать подключиться к любой базе данных, для которой есть JDBC.

Для сравнения вот список баз данных, которые поддерживает DataGrip: PostgreSQL, MySQL, Oracle Database, Microsoft SQL Server, MongoDB, Redis, Azure SQL Database, Amazon Redshift, Amazon DynamoDB, SQLite, IBM Db2, H2, Sybase ASE, Exasol, Apache Derby, MariaDB, HyperSQL, Snowflake, Apache Cassandra, ClickHouse, Greenplum, Apache Hive, Vertica, CockroachDB, Couchbase, Google BigQuery.

Обзор элементов базы данных

Оба плагина позволяют просматривать структуру базы данных прямо в IDE. Визуально DataGrip кажется более удобным и приятным. Однако, с точки зрения функциональности, оба решения справляются одинаково хорошо.

Поддержка SQL
Оба плагина предлагают автодополнение и подсветку синтаксиса при написании SQL-кода.

Но Database Navigator временами справляется хуже. Например, у меня так и не получилось доказать ему, что следующая конструкция является валидной:

Запуск SQL-запросов

Database Navigator также, как и DataGrip, позволяет запускать SQL-скрипты непосредственно из IDE.

Однако, некоторые моменты не всегда интуитивно понятны. Например, по умолчанию режим "Auto commit" выключен, поэтому запросы не выполняются сразу после их запуска. Но опять же, подобные моменты довольно субъективны, и инструмент всегда можно настроить “под себя”.

Итоги.

Плюсы:

  • Бесплатный
  • Open source
  • Интегрирован в IDE
  • Есть поддержка основных SQL-баз данных
  • Позволяет просмотривать структуру БД
  • Есть возможность запуска SQL-скриптов

Минусы:

  • Нет поддержки NoSQL и малопопулярных SQL СУБД
  • Отсутствие документации
  • Нет поддержки ER диаграм
  • Местами непонятный UI/UX

DBeaver

Одним из самых популярных инструментов для работы с базами данных является DBeaver.

Хотя это не встроенный в IDE плагин, упомянуть его просто необходимо. Этот DB-клиент давно зарекомендовал себя среди разработчиков и аналитиков данных, благодаря чему вокруг него образовалось широкое сообщество пользователей. Также стоит упомянуть наличие довольно полной документации. Поэтому вряд ли вам нужно подробно объяснять его функциональность, однако краткий обзор плюсов и минусов использования Dbeaver всё таки сделаю.

Плюсы:

  • Есть бесплатная open-source версия, которая поддерживает множество SQL СУБД
  • Проверенное годами решение с регулярными обновлениями и багфиксами
  • Позволяет просмотривать структуру БД
  • Есть возможность запуска SQL-скриптов
  • Есть поддержка ER диаграм
  • Конечно же, есть множество других фич, но Spring разработчики ими пользоваться будут скорее всего не так часто

Минусы:

  • Не встроен в IDE
  • Поддержка NoSQL СУБД есть только в платной версии

pgAdmin, phpMyAdmin, mongo-express

DBeaver — это универсальный инструмент, который охватывает большинство потребностей при работе с базами данных. Однако, иногда необходимо использовать более специфические решения, заточенные под конкретные СУБД. Такие клиенты, как pgAdmin для PostgreSQL, phpMyAdmin для MySQL и MariaDB, а также mongo-express для MongoDB, предлагают возможности, адаптированные под особенности каждой СУБД.

Плюсы:

  • Большинство таких клиентов доступны бесплатно
  • Каждый клиент предоставляет функции, разработанные специально для работы с конкретной СУБД
  • Позволяет просмотривать структуру БД
  • Есть возможность запуска SQL-скриптов
  • Есть поддержка ER диаграм
  • Конечно же, есть множество других фич, Spring разработчики ими пользоваться будут скорее всего не так часто

Минусы:

  • Не встроены в IDE
  • У каждого клиента свои особенности, требующие времени для освоения

HTTP Client

Hurl

Hurl — это CLI-инструмент для выполнения HTTP-запросов, записанных в текстовом формате. Например:

POST https://example.org/api/tests
{
    "id": "4568",
    "evaluate": true
}
HTTP 200

Hurl довольно сильно напоминает то, как выглядят HTTP-запросы в IntelliJ IDEA Ultimate. Например, тот же самый запрос в IntelliJ IDEA Ultimate выглядел бы практически идентично:

POST https://example.org/api/tests
Content-Type: application/json

{
    "id": "4568",
    "evaluate": true
}

И совсем недавно в JetBrains Marketplace появился одноимённый плагин, который интегрирует Hurl в IntelliJ IDEA. Он добавляет:

  • Подсветку синтаксиса
  • Проверку на синтаксические ошибки
  • Поддержку JSON, XML, jsonpath и xpath

Однако плагин новый, и его будущее пока неясно. Но даже если его поддержка прекратится, вы всегда сможете выполнять написанные ранее скрипты Hurl из терминала.

REST-assured

Файлы с расширениями .http или .hurl , безусловно, могут быть полезными и удобными, на ранних стадии проекта, в демо-проектах или небольших пет-проектах. Однако, если у нас возникла необходимость проверить что вернет сервис и в каком формате, то логичнее будет написать тесты. Не так ли?

Здесь на помощь приходит REST-assured. Эта библиотека позволяет легко и удобно писать тесты для REST API. Например, всё тот же запрос, что мы использовали выше, написанный с использованием REST-assured, выглядел бы следующим образом:

@Test
void postExample() {
    given()
       .contentType(ContentType.JSON)
       .body("""
          {
            "id": "4568",
            "evaluate": true
          }""")
       .when()
       .post("https://example.org/api/tests")
       .then()
       .statusCode(200);
}

Вот несколько ключевых преимуществ:

  • Обширный API, который покрывает множество сценариев тестирования
  • Запросы пишутся на Java в удобном для многих chain-стиле. Этот факт избавляет нас от необходимости учиться писать запросы в другом формате, будь то .http или .hurl
  • REST-assured — зрелый проект с документацией и множеством примеров

Из минусов можно отметить лишь то, что это еще одна зависимость для вашего проекта. Но разве это такая уж проблема?

Postman

Как и в случае с DBeaver, я не могу не отметить один из самых популярных способов “дернуть” какой-нибудь эндпоинт – Postman.

Думаю, как и в случае с DBeaver, подробно останавливаться тут нет смысла. Вкратце перечислю плюсы и минусы.

Плюсы:

  • Интуитивно понятный графический интерфейс
  • Обширная документация
  • Поддержка популярных архитектур API, включая REST, GeaphQL, SOAP

Минусы:

  • Довольно много возможностей Postman доступны только по подписке, поэтому если вам не будет хватать бесплатного плана, придётся искать альтернативы или заплатить

Поддержка Spring в Amplicode

Amplicode – это набор инструментов для максимально комфортной и эффективной разработки web-приложений на Spring Boot и React Admin. Сегодня я расскажу, как именно Amplicode помогает Spring-разработчикам.

Amplicode можно установить как плагин в IntelliJ IDEA Community и Ultimate, а также в другие IDE на базе IntelliJ IDEA, такие как недавно выпущенная Giga IDE. Единственное отличие — нужно настроить кастомный маркетплейс, чтобы плагин стал доступен в поиске.

Для сравнения я возьму лендинг IntelliJ IDEA Ultimate, описывающий поддержку Spring, и главную страницу Amplicode с его возможностями.

Создание приложения с нуля

IntelliJ IDEA Ultimate позволяет создавать приложения прямо из IDE, что удобно для тех, кто часто работает над пет-проектами или демо-проектами. В Amplicode такой фичи нет, поэтому вам придется воспользоваться Spring Initializr.

Интеллектуальная поддержка во время набора кода

И IntelliJ IDEA Ultimate, и Amplicode предлагают автодополнение кода в различных частях Spring-проекта: в файлах .properties и .yaml, Spring-объектах, местах инжекции бинов, методах контроллеров и так далее. Например:

Однако у Amplicode есть более фреймворко-ориентированные автодополнения. Например, можно инжектировать еще не существующий бин в контроллер, вызвав диалог создания прямо в месте, где понадобился бин.

Также Amplicode расширяет возможности автодополнения методов Spring Data JPA: автодополнение работает не только в репозиториях, но и в местах их использования. Вы просто вводите название метода там, где он нужен, нажимаете ОК, и он создается автоматически — без необходимости переключаться между файлами.

Инспекции и Quick fixes

Оба решения предоставляют множество инспекций и quick fix’ов. Однако у IntelliJ IDEA Ultimate их больше, хотя некоторые пересекаются с теми, что предлагает Amplicode.

Рефакториги

И IntelliJ IDEA Ultimate, и Amplicode позволяют делать рефакторинг кода в контексте используемых технологий. Снова Amplicode идёт чуть дальше и, например, позволяет переименовывать не только поля JPA сущности, но и связанных с ней DTO:

Бин-навигация

Обе IDE предоставляют удобные значки для навигации к месту объявления и инжекции бинов. Основное отличие в том, что в Amplicode нет возможности посмотреть диаграмму зависимостей:

А в IntelliJ IDEA нельзя увидеть древовидный список:

Run/Debug конфигурация для Spring-приложений

И IntelliJ IDEA Ultimate и Amplicode создают Run/Debug конфигурации для корректного запуска Spring-приложений.

Отображение эндпоинтов

В IntelliJ IDEA Ultimate есть отдельная панель для отображения всех эндпоинтов текущего проекта.

В Amplicode такой панели нет, но есть секция в Amplicode Explorer с возможностью выбрать один из нескольких стилей отображения: плоский, иерархический или с группировкой по контроллерам.

Взгляд на проект в контексте используемых технологий

Кстати про панель Amplicode Explorer, она позволяет взглянуть на проект в контексте используемых технологий и увидеть, какие стартеры подключены и как они настроены.

Поддержка actuator

IntelliJ IDEA Ultimate предоставляет вкладку Actuator в панели Services, где мы можем контролировать и управлять состоянием Spring Boot приложения. Здесь можно просматривать бины в рантайме, их статус, а также request маппинги. Amplicode, к сожалению, на данный момент, не поддерживает Actuator.

Поддержка Docker/Kubernetes

IntelliJ IDEA Ultimate поддерживает Docker и Kubernetes, позволяя взаимодействовать с запущенными сервисами через панель Services.

Docker также поддерживается в IntelliJ IDEA Community Edition через бесплатный плагин. Однако поддержки Kubernetes в бесплатной версии нет.

Amplicode частично решает эту проблему: в последнем релизе появилась поддержка Kubernetes и Helm. Но отмечу, что вместо простого копирования фич из Ultimate, Amplicode добавил свои, например, генерацию Helm чартов для Spring Boot приложений и их запуск из Amplicode Explorer:

Стоит также отметить широкую поддержку Docker Compose в Amplicode. С помощью диалоговых окон можно генерировать код для множества сервисов, включая Spring Boot и популярные СУБД.

Вы также можете изучить и отредактировать свойства этих сервисов через панель Amplicode Designer:

Итого

Название фичи IntelliJ IDEA Ultimate Amplicode
Создание приложения с нуля + -
Интеллектуальная поддержка во время набора кода + +
Возможность создавать и инжектировать несуществующие бины в месте обращения к ним - +
Автодопленение названий методов Spring Data JPA репозиториев в месте обращения к ним - +
Инспекции и Quick fixes + +, но по-меньше)
Bean-навигация + +
Навигация по бинам через диаграмму + -
Навигация по бинам в виде древовидного списка - +
Run/Debug конфигурация для Spring-приложений + +
Анализ проекта в контексте используемых технологий - +
Отображение всех эндпоинтов проекта + +, но по-больше)
Поддержка Actuator + -
Поддержка Docker в части отображения и запуска Docker Compose сервисов + +
Поддержка Kubernetes в части отображения запущенных подов + -, но скоро будет +!
Генерация Helm чартов - +
Редактирование Docker Compose файлов - +

В целом, поддержка Spring и связанных с ним технологий присутствует как в IntelliJ IDEA Ultimate, так и в Amplicode. Во многом они схожи: базовые функции, такие как подсветка используемых бинов, будут работать идентично. Однако есть и отличия. Если какие-то из функций, которые отсутствуют в Amplicode по сравнению с Ultimate, критичны для вас, как для Spring-разработчика, и вы не можете без них обойтись, напишите нам в Telegram-чат. Мы постараемся приоритизировать решение этой проблемы.

Итоги

Подводя итог, теперь мы можем немного обновить ту таблицу, с которой начали.

Возможности IntelliJ IDEA Ultimate IntelliJ IDEA Community Edition
1. Java/Kotlin + +
2. Рефакторинги + +
3. Инспекции + +
4. Git + +
5. Gradle/Maven + +
6. Debugger + (есть поддержка Reactive Streams) +
7. Database Tools + (Database Navigator) -
8. HTTP Client + + (Hurl)
9. Spring Framework + + (Amplicode)
10. Up to you :) + -

Я добавил названия плагинов, установив которые в IntelliJ IDEA Community Edition, вы сможете сохранить большинство функций, предоставляемые Ultimate. Все перечисленные плагины на данный момент бесплатны. Конечно, ситуация может измениться, и Amplicode может ввести какую-то модель монетизации, но пока этого не произошло, можно воспользоваться всеми возможностями, используя IntelliJ IDEA CE “на стероидах” абсолютно бесплатно. Она будет очень напоминать Ultimate, а в некоторых аспектах даже превосходить её благодаря уникальным возможностям Amplicode, которых нет в Ultimate.

Ну а для тех, кто продолжает использовать IntelliJ IDEA Ultimate, ситуация вообще “win-win”, вы можете установить Amplicode и получить те фичи которых нет в Ultimate, при этом не потерять те фичи, которые в ней есть :)

Подписывайтесь на наши Telegram и YouTube, чтобы не пропустить новые материалы про Amplicode, Spring и связанные с ним технологии!