3. Выбор среды разработки IDE для Java
Фортран: Дорогие друзья, каждому программисту, и Java-программист здесь не исключение, нужна IDE (integrated development environment), которая будет делать за него всю грязную работу во время написания кода. IDE должна обладать разнообразными средствами интеграции с библиотеками классов и фреймворками.
Решение в пользу той или другой IDE должно основываться на том, что мы разрабатываем, какую роль играем в команде разработчиков, какую методологию разработки применяем и каков наш уровень, как программиста. Кроме того, нельзя исключать такие факторы, как стандарты, принятые в команде разработчиков и наши персональные предпочтения.
Есть 3 наиболее популярных IDE, которые чаще всего применяются для разработки серверных приложений на Java (так называемый, бэкенд) – это IntelliJ IDEA, Eclipse и NetBeans.
Я попросил Гусеницу, Воробья и Икса подготовить устный доклад по их любимой IDE.
Кто готов быть первым?
Икс: Я могу попробовать, моя любимица – это IntelliJ IDEA.
Фортран: Отлично, но прежде, чем я дам тебе слово, позволь я сделаю небольшое отступление, чтобы пояснить, на каких особенностях IDE тебе лучше всего акцентировать внимание в твоем докладе.
Чего же мы ждем от среды разработки на Java? В первую очередь IDE должна поддерживать последние версии языков Java, Scala, Groovy и других JVM языков, которые мы регулярно используем. Она также должна поддерживать работу с большинством серверов приложений и большинством популярных веб-фреймворков, включая Spring MVC, JSF, Struts, GWT, Play и Vaadin. Этот список также зависит от того, какие из фреймворков мы используем в своей повседневной работе. Наша IDE должна быть совместима с системами сборки и контроля версий, которые используются в нашей команде разработчиков, например, Ant, Maven, Gradle совместно с Git, SVN, CVS и Mercurial. Дополнительным плюсом будет способность IDE подключаться и выполнять запросы по базе данных на языке SQL. Поддержка JavaScript, TypeScript, HTML, JavaServer Pages, Hibernate и Java Persistence API (JPA) также будет не лишней.
Наконец, очень важно, чтобы наша среда разработки позволяла нам редактировать, собирать, отлаживать и тестировать наши программы простым и удобным образом. В идеале, в IDE не только должны работать механизмы автозавершения кода, но и присутствовать удобные средства рефакторинга и анализа нашего кода. Если наша команда разработчиков применяет методологию разработки TDD (test-driven development), т.е. разработка через тестирование, нам также потребуется, чтобы IDE обеспечила хорошую поддержку тестовых фреймворков. Если в нашей команде применяются баг-трекеры или/и системы непрерывной интеграции (CI/CD), было бы неплохо, если мы смогли работать с ними прямо из нашей IDE. Если в процессе нашей работы нам требуется регулярно делать деплой, т.е. загрузку программы на сервер приложений, и там же производить отладку, наша среда разработки должна нам в этом способствовать.
Учитывая все это, перейдем к рассмотрению конкретных IDE. Итак, Икс, тебе слово.
Икс: Спасибо, профессор. Как я уже сказал, я работаю в IntelliJ IDEA. Это передовая IDE с точки зрения функционала. Она выпускается в двух вариантах: бесплатная версия Community edition, и платная Ultimate edition, которая имеет дополнительные возможности.
Версия Community edition предназначена для Java разработки, в том числе и под Android. Здесь реализована поддержка языков Java, Kotlin, Groovy и Scala; систем сборки Maven, Gradle и SBT; и систем контроля версий Git, SVN, Mercurial и CVS.
Версия Ultimate edition предназначена для веб и Enterprise разработки. В ней реализована поддержка всего, что есть в Community edition, а кроме того в ней поддерживается работа с такими системами контроля версий, как Perforce, ClearCase и TFS (Team Foundation Server от Microsoft). Кроме того, здесь поддерживается работа с языками JavaScript и TypeScript, а также фреймворками Java EE, Spring, GWT, Vaadin, Play, Grails и другими. И разумеется разработчики этой замечательной среды разработки включили в нее специальные инструменты для работы с базами данных на языке SQL.
Выглядит IDEA так:
IntelliJ продвигает IDEA по 4-м ключевым позициям:
- Инструмент, понимающий код разработчика.
- Инструмент, удобный для программиста.
- Инструмент со множеством вспомогательных инструментов.
- Инструмент, позволяющий программировать на нескольких языках.
Давайте разберем, что все это значит, и как это помогает программисту в работе.
IntelliJ IDEA, как инструмент, понимающий код разработчика
Подсветка синтаксиса и простое автозавершение кода есть в любом редакторе Java кода. IDEA позиционируется как инструмент с умным автозавершением кода, предоставляющий несколько вариантов завершений, уместных в данном контексте. Причем этот набор сортируется на основе частоты использования вами каждого из вариантов завершения кода. Если после имени переменной вы ставите точку, то IDEA сразу подскажет вам, какие у этой переменной есть геттеры, сеттеры и прочие методы, доступные вам. IDEA также пытается самостоятельно вставлять все необходимые import-ы библиотек. Во время всех операций по автозавершению кода, IDEA пытается угадать тип выражения и при необходимости предложит сделать приведение типов.
В Java часто используются конструкции из других языков внутри строковых переменных. IDEA может вставлять фрагменты SQL, XPath, HTML, CSS и JavaScript кода в строковые литералы Java (тип String). Таким образом, в IDEA, по сути, поддерживается рефакторинг кода сразу на нескольких языках. Например, если вы переименуете класс в JPA выражении (на языке JPQL или HQL), IDEA переименует соответствующий entity класс.
Когда вы рефакторите код, вам может понадобиться отрефаторить и дубликаты этого кода, если таковые имеются. IDEA Ultimate умеет обнаруживать дубликаты и схожие участки кода и применять рефакторинг и к ним тоже.
IntelliJ IDEA анализирует ваш код во время загрузки и во время его набора на клавиатуре. Она проводит проверки и указывает возможные проблемы и по возможности предлагает список быстрых решений.
IntelliJ IDEA как инструмент, удобный для программиста
Для удобства программиста IntelliJ IDEA позволяет скрывать все дополнительные вкладки, типа вкладки Project (она видна на рисунке выше слева сверху) или вкладки Maven. Это позволяет программисту сконцентрироваться на написании кода. Для редактирования кода применяется широкий набор горячих клавиш. Однако и не зная горячих клавиш, можно легко и быстро научиться работать в IDEA.
Отладчик IDEA также хорошо спроектирован. Значения переменных показываются прямо в редакторе кода, напротив соответствующей строки исходного кода. Когда значение переменной меняется, меняется и цвет ее подсветки.
IntelliJ IDEA как инструмент со множеством вспомогательных инструментов
IntelliJ IDEA имеет унифицированный интерфейс для работы с любой системой контроля версий, включая Git, SVN, Mercurial, CVS, Perforce и TFS. Вся работа с системой контроля версий может происходить прямо в IDEA.
IDEA также интегрирована с системами сборки, системами тестирования и имеет встроенное окно терминала Windows. IDEA не имеет в своем составе собственного профилировщика, но она поддерживает работу со сторонними профилировщиками через плагины. Например, YourKit, который разработан бывшим сотрудником IntelliJ, и VisualVM, который является портом с профилировщика NetBeans.
Отладка Java может оказаться сложной, если не для всех классов есть исходные коды. Для этого IDEA содержит встроенный декомпилятор Java кода.
Программирование серверного кода на Java, так называемый бэкенд, часто сопровождается работой с базами данных. Для этого в IDEA Ultimate включен инструмент выполнения запросов на языке SQL.
IntelliJ IDEA поддерживает все современные сервера приложений Java, предоставляя инструменты деплоя и отладки приложений прямо на сервере. Кроме того, есть специальный плагин для работы с Docker. Вообще для IDEA есть множество плагинов, которые можно найти на официальном сайте.
IntelliJ IDEA как инструмент, позволяющий программировать на нескольких языках
IDEA имеет встроенный помощник для работы со множеством фреймворков, например, Spring, Java EE, Grails, Play, GWT, Vaadin, Thymeleaf, React, AngularJS и другими. В этом списке присутствуют не только Java фреймворки. Кроме Java, IDEA понимает множество других языков, включая Groovy, Kotlin, Scala, JavaScript, TypeScript и SQL. А если и этого вам мало, в настоящее время есть около 19 плагинов, для таких языков как R и D.
У меня все! Ну, не уж то, есть IDE лучше, чем IDEA?
Гусеница: А то! Нет ничего круче, чем Eclipse! Сейчас я вас с ним познакомлю.
Eclipse уже давно является самой популярной Java IDE, он бесплатен и его исходники доступны каждому. Причем написан Eclipse в основном на Java, хотя архитектура плагинов Eclipse позволяет писать их и на других языках. Eclipse был разработан в 2001 году компанией IBM как проект по замене предыдущего семейства IBM-овских IDE под названием Visual Age. Целью проекта было затмить Microsoft Visual Studio, от этого и было выбрано название Eclipse, что переводится как затмение.
Благодаря тому, что Eclipse написан на Java, он является кроссплатформенным и может работать хоть на Linux, хоть на Mac OS X или Windows.
Икс: Ха! Тоже мне удивила, IDEA тоже на Java написана и работает также везде. Зато твой Eclipse тормозной.
Гусеница: Позволь я продолжу, я тебя не перебивала. Так вот. Плохо это или хорошо, но, по крайней мере, частично интерфейс Eclipse выполнен на Java SWT (standard widget toolkit). Более того, Eclipse обязан своей производительностью, или как считает Икс ее отсутствием, виртуальной машине Java. Да, согласна, Eclipse имеет репутацию очень медленной среды, и даже сегодня это можно ощутить, особенно когда он начинает в фоновом процессе обновляться, а у тебя установлено множество плагинов.
Частично медлительность Eclipse связана с работой инкрементного компилятора, который запускается каждый раз, когда вы загружаете файл или обновляете код. Несмотря на это, это очень полезная штука, т.к. показывает ошибки прямо во время набора текста программы.
Независимо от применяемой системы сборки, проект Eclipse на языке Java создает модель своего контента, которая включает в себя информацию об иерархии типов, ссылках и объявлениях Java элементов.
Есть много сборок Eclipse под разные языки программирования, под одну только Java есть несколько разных сборок. Например, есть Eclipse Java EE IDE для веб-разработчиков. Кроме того, можно поставить себе минимальный пакет, состоящий только из Eclipse SDK, а потом поставить все остальное, выбрав необходимые плагины. Однако последний вариант на любителя, т.к. с легкостью можно столкнуться с конфликтами между плагинами, даже если в их описании и не было заявлено о какой-либо несовместимости.
Выглядит Eclipse вот так:
Теперь подробнее поговорим о плагинах. Экосистема плагинов – это одна из сильнейших сторон Eclipse, однако она же может служить причиной всяких проблем. На данный момент Eclipse marketplace содержит свыше 1500 плагинов, правда не всегда эти плагины работают как заявлено. Eclipse плагины созданы для работы под более, чем 100 программных языков и почти 200 фреймворков. Также поддерживается большинство серверов приложений Java: если вы открываете новое соединение с сервером прямо из Eclipse, перед вами раскроется список, состоящий из около 30 серверов приложений, включая несколько версий Apache Tomcat. Разработчики коммерческих серверов приложений склонны объединят свои продукты в группы, поэтому здесь, например, есть группа Red Hat JBoss Middleware, которая содержит как WildFly, так и JBoss.
Хочу еще сказать пару слов о редактировании кода, навигации по проекту, о рефакторинге и отладке.
Первый опыт работы с Eclipse может вас ввести в замешательство. Сначала вам нужно приспособиться к Eclipse-скому виду рабочего места (workspace), разобраться, что такое ракурсы (perspective) и вкладки (views), функционал которых определяется набором установленных плагинов. Например, для разработки под сервера приложений Java, вам, вероятно, будут удобны ракурсы Java, Java EE или Java browsing, включая вкладку Package explorer. В моменты отладки и для работы в команде разработчиков пригодятся ракурсы Debugging и Team synchronizing. А для работы с базами данных будут удобны ракурсы Database development и Database debugging. Вы поймете, для чего вам выбирать тот или иной ракурс, когда вы попробуете его в работе.
В Eclipse одну и туже задачу зачастую можно решить разными способами. Например, вы можете осуществлять навигацию по коду при помощи Package explorer или вы можете переключиться на ракурс Java browsing. Какой из вариантов выбрать, каждый решает сам.
Поиск по Java позволяет находить объявления, ссылки, вхождения Java пакетов, типы, методы и поля.
Стандартные кодовые паттерны могут быть сгенерированы на основе шаблонов кода. Eclipse может автоматически добавлять необходимые import-ы в классы. Рефакторинг в Eclipse поддерживает много разных операций, начиная с простых операций переименования и заканчивая неочевидными преобразованиями кода, которые можно найти в книге Мартина Фаулера «Рефакторинг. Улучшение проекта существующего кода». Рефакторинг можно выполнять не только ручками, но и через написание скриптов.
Eclipse позволяет отлаживать код как локально, так и удаленно, если, конечно, ваша виртуальная машина Java поддерживает (настроена на) удаленную отладку. Отладка стандартная: вы ставите брейкпоинты (точки останова), а потом смотрите значения переменных на соответствующей вкладке, например, выбрав ракурс Debugging. Вы также можете выполнять трассировку, пошагово выполняя код и вычисляя интересующие значения выражений.
Eclipse имеет обширную документацию. Однако в ней зачастую можно обнаружить, что скриншоты не соответствуют текущей версии IDE или что сочетания клавиш, приведенные для вашей операционной системы, на самом деле, не работают. Стоит отметить, что такая ситуация сопровождает большинство open source проектов, где документация может отставать от кода на месяцы и даже годы. А поскольку Eclipse – это очень большой проект, то подобная ситуация тем более не удивительна.
Фортран: Прекрасный доклад! И у тебя, Икс, тоже. Ну, Воробей, а ты, что скажешь? Опять не сделал домашнее задание? Только не говори, что его украла сорока.
Воробей: Обижаете, профессор. Когда это я вас подводил? На этой неделе…
Я хочу рассказать вам о лучшей IDE на свете. Это NetBeans, который был разработан в 1996 как университетский проект, в 1997 стал коммерческим, в 1999 был куплен компанией Sun, и стал бесплатным open source решением в 2000 году.
Гусеница: К чему нам эта историческая справка?
Воробей: Ни к чему! Я просто тяну время доклада. Итак, продолжим.
Современные версии NetBeans, как и упомянутые выше IDE, работают на Windows, Mac OS X или Linux, и в целом NetBeans может работать на любой платформе, поддерживающей Java. Для скачивания доступны несколько сборок NetBeans, одна из которых Java EE, предназначенная для enterprise и веб-разработки. Данный вариант поддерживает работу с языками JavaScript и HTML, серверами приложений GlassFish и Tomcat, но не поддерживает такие языки как PHP, C/C++ и Groovy. Однако можно скачать и полный вариант NetBeans, который содержит все вышеперечисленное. Правда в этом нет особой необходимости, т.к. все это можно легко добавить через плагины, если это потребуется. NetBeans имеет меньше плагинов чем Eclipse, но вероятность конфликта между плагинами практически равна 0.
Oracle все еще вкладывается в open source проект NetBeans и рассматривает его как официальную среду разработки под Java. Именно поэтому она раньше, чем остальные IDE начинает работать с новыми версиями Java.
Фортран: Справедливости ради стоит отметить, что разработчики других IDE включают у себя поддержку новых версий Java в течение одного/двух месяцев, поэтому это сложно назвать серьезным преимуществом NetBeans. Но в целом ты прав, Воробей. Продолжай…
Воробей: Сделаю вид, что я этого не слышал.
Помню, когда состоялся переход на Java 8, редактор и анализатор кода NetBeans выдавали подсказки по переводу моего разрабатываемого приложения на языковые конструкции новой версии Java, такие как lambda-ы, функциональные операции и ссылки на методы.
JavaScript плагины в NetBeans включают поддержку Node.js и таких новых JavaScript инструментов как Gulp и Mocha, также есть поддержка JavaScript-интерпретатора Nashorn.
Внешний вид NetBeans проще лицезреть, чем описать словами:
Позволю себе остановиться на редактировании кода и его рефакторинге. Редактор NetBeans обнаруживает ошибки во время набора кода и помогает программисту всплывающими подсказками, предлагая варианты автозавершения.
Честно признаюсь, что я поработал и в Eclipse, и в IntelliJ IDEA и по моим субъективным ощущениям могу сказать, что тормоза в NetBeans меньше, чем в Eclipse, хотя и слегка больше, чем в IntelliJ IDEA.
В NetBeans представлен богатый набор инструментов для рефакторинга, который позволяет вам реструктурировать код, не сломав его. Встроенный анализатор исходного кода предлагает обширный набор подсказок для быстрого его исправления и улучшения. Кроме того, NetBeans содержит инструмент визуального построения графического пользовательского интерфейса GUI на базе технологии Swing.
Есть еще такой замечательный инструмент, как Inspect & Transform, который позволяют запустить анализ всей кодовой базы проекта, с автоматических исправлением ошибок. Лично я и до и после запуска такого рода инструментов всегда прогоняю по проекту все свои юнит тесты, т.к. я не раз обжигался на том, как такие автоматические улучшалки кода просто напросто его ломают.
В завершение своего доклада я хотел бы остановиться на сборке, отладке и профилировании.
NetBeans имеет встроенную поддержку систем сборки Maven и Ant, также есть плагин для Gradle. На данный момент проекты Maven считаются для NetBeans родными, поэтому вы их не импортируете в IDE, а просто открываете. NetBeans содержит полезный инструмент отображения Maven зависимостей, хотя я знаю, что в IntelliJ IDEA есть нечто подобное.
Отладчик NetBeans неплох, хотя в нем и нет ничего сверхестественного. Визуальный отладчик позволяет делать скриншоты графических интерфейсов и исследовать их работу, если они построены на базе технологий JavaFX или Swing. Профилировщик NetBeans позволяет следить как за использованием CPU, так и оперативной памяти, и обладает удобными инструментами для поиска утечек памяти (memory leaks).
У меня все.
Фортран: Спасибо, друзья. Всем по пятерке с плюсом.
А теперь я хотел бы поделиться своим опытом и провести некоторое сравнение рассмотренных IDE, добавив толику субъективизма, т.к. для дальнейшей работы нам нужно остановить свой выбор на одной из сред разработки.
Лично я поработал и с Eclipse, и с NetBeans, и с IntelliJ IDEA. Причем именно в этой последовательности. И каждый раз меняя среду разработки я чувствовал, что моя производительность выросла, правда для этого нужно было привыкнуть к новой IDE.
Однажды я твердо решил переключиться на IntelliJ IDEA, однако мне иногда приходилось возвращаться к другим IDE. Например, мне пришлось переключиться на Eclipse, когда мне понадобилось разрабатывать приложения под Android, а официальная IDE под эту платформу Android Studio была основана именно на Eclipse. Однако сейчас, Android Studio перестроена на базе IntelliJ IDEA, что лично меня не может не радовать.
Среди моих друзей есть серьезные разработчики Java, каждый из которых работает со своей любимой IDE из числа рассмотренных выше. Пользователи IntelliJ IDEA любят их IDE также сильно, как, наверное, C++ и C# кодеры любят Visual Studio. И те и другие часто утверждают, что прирост их продуктивности окупил стоимость их сред разработки за несколько недель использования. С другой стороны пользователи NetBeans и Eclipse также уверены в своем выборе и недоумевают, почему люди платят за IntelliJ IDEA.
Все же я склонен считать, что новым Java кодерам не стоит использовать Eclipse, несмотря на его популярность в Java мире, т.к. в нем легко запутаться из-за множества ракурсов и вкладок, переключение между которыми может быть не всегда удобно и очевидно. Кроме того, как правильно заметила Гусеница, Eclipse обладает самым богатым набором плагинов среди всех IDE, что может привести к проблемам их несовместимости между собой, если вы будете «злоупотреблять» их использованием. Мне неоднократно приходилось сталкиваться с тем, что установка плагинов ломала мне всю систему и было проще удалить весь Eclipse и установить его заново, чем разбираться, что же именно там сломалось.
NetBeans подходит для большинства юзеров и имеет неплохой профилировщик. Иногда я использую его, однако все же предпочитаю работать с IntelliJ IDEA Ultimate.
Для новичков, которые не обладают средствами на покупку IDE, остается выбор между NetBeans и IntelliJ IDEA Community Edition. Однако если вы программируете под сервер приложений Java, то IntelliJ IDEA Community Edition вам не подойдет и для вас, наверное, лучшим выбором будет NetBeans. Тем не менее, вы можете получить IntelliJ IDEA Ultimate бесплатно или со скидкой, если вы попадаете под льготную категорию программистов, как например студенты или разработчики open source проектов.
Все таки, предлагаю остановиться на IntelliJ IDEA Ultimate. Согласны?
Икс: Я согласен был с самого начала. А Гусенице и Воробью я помогу в работе с этой новой для них средой разработки. Если они не против…
Воробей и Гусеница: Ладно, ловим тебя на слове!