11 плюшек для Java-разработчика
Базовый инструментарий программиста Java: среда разработки, среда сборки и сервер. Поначалу этого достаточно, но лень — двигатель прогресса, и со временем вы захотите ускорить решение типовых задач.
Представляем подборку библиотек, которые упрощают жизнь и начинающему, и опытному разработчику.
Лидеры GitHub
Как отличить библиотеки, о которых больше говорят, от тех, которыми действительно пользуются? По итогам 2017 года аналитики OverOps назвали объективно востребованные Java-библиотеки на GitHub. Данные собирали с помощью Google BigQuery и API GitHub. Для начала из 1000 самых «звёздных» репозиториев отсеяли всё связанное с Android и Arduino. Затем отобрали Java-библиотеки, удалили файлы-дубликаты, и в итоге получили для анализа 25 788 оригинальных пакетов. На диаграмме ниже видим двадцатку лидеров по частоте использования.
Если не мельчить с пакетами, а брать только библиотеки и фреймворки, в первой пятёрке остаются:
-
JUnit — для тестирования юнитов;
-
Mockito — для создания заглушек (mock-объектов) при тестировании;
-
Slf4j — фасад для систем протоколирования, так называемый «логгер»;
-
Hamcrest — упрощает написание тестов в JUnit,
-
Guava (в лице com.google.common.collect) — для работы с коллекциями.
Три из пяти плюшек (JUnit, Mockito и Hamcrest) связаны с тестированием! Это значит, что в 2017 году Java-сообщество GitHub интересовали прежде всего инструменты для повышения надежности кода.
Java-библиотеки, которые экономят время
Следовать только за вкусами сообщества GitHub было бы скучно. Тем более, у российских программистов и их работодателей могут быть свои нужды и предпочтения. Составим список Java-фреймворков, ускоряющих разработку, и расскажем о каждом. Если опытные участники сообщества GeekBrains что-то дополнят или предложат заменить — отлично! Это дискуссионная тема.
1. Jackson
Java не умеет «из коробки» читать формат JSON, востребованный в веб-разработке. Его поддержку джависты реализуют с помощью библиотек org.json, Google GSON, Jackson, JSONP и других. В чём разница между ними? Тот же блог OverOps недавно сравнивал JSON.simple, GSON, Jackson и JSONP по скорости обработки файлов. Номинаций было две: обработка "больших" файлов — от 190 Мб, и малых — весом 1 Кб. С большими файлами быстрее всех справился Jackson. А вот килобитную мелочь он парсил дольше всех — лидером в этой номинации стал гугловский GSON.
Но часто ли в веб-приложениях вы парсите файлы весом до 1Кб? В большинстве случаев есть смысл выбрать Jackson.
2. Jetty
HTTP-сервер и контейнер Java-сервлетов для тех, кто создаёт веб-службы, но не любит Tomcat за тяжеловесность. Jetty встраивается во фреймворки, устройства (телефоны, например), серверы приложений, кластеры. Это решение применяют для организации облачных вычислений и сервисов, создания сред разработки и сборки. Веб-сервер Jetty является компонентом Maven, Eclipse, Google App Engine и Apache Geronimo. Асинхронная архитектура сервера позволяет ему справляться со множеством мелких запросов и делает его устойчивым к DOS-атакам. При своей легкости это решение масштабируется под высоконагруженные сервисы корпоративного уровня.
3. Lombok
Библиотека, которая использует аннотации Java, чтобы генерировать за вас шаблонный код (boilerplate). Вы можете создавать классы данных по ускоренной программе — в виде набора полей и аннотаций. Так, @Getter и @Setter отвечают за создание геттеров и сеттеров для нужных полей. Реализовать ленивую инициализацию поля можно добавлением в аннотацию атрибута lazy со значением true. Вы также можете заменять аннотациями типовые методы (@equals, @toString, @hashCode) и объявления логгеров (@Slf4j, @Log4j, @CommonsLog).
Вы можете создавать неизменяемые классы вместе с типовыми методами и геттерами к ним — с помощью @Value. Все поля класса будут финализированы и сделаны приватными.
Для синхронизации методов есть @Synchronized. А если вам нужно разделить конструирование и представление объекта, вы реализуете шаблон проектирования Builder в одну строку — с аннотацией @Builder.
4.TelegramBots от rubenlagus
Название говорит за себя — это библиотека для создания телеграм-ботов на Java. Удобство в том, что разработка движется от способности (Ability) бота вести себя так или иначе. Вы создаёте объект Ability и конкретизируете входные данные, место действия (группа или персональный чат), права доступа (кто может использовать данную способность — кто угодно, админ или только создатель бота), сами действия и то, что происходит после их завершения. Каждая новая функция бота — новая способность, которую вы можете настроить отдельно. Для каждой Ability — своя встроенная база данных.
Бот автоматически ведёт историю контактов с пользователями, актуализирует имена и ники, которые изменились уже после чата. В TelegramBots есть готовые механизмы продвижения и разжалования админов, бана и снятия бана с юзеров. Для базы данных предусмотрено резервное копирование.
Примеры ботов на основе библиотеки: погодный бот, файловый бот, бот Королевской академии испанского языка (Real Academia Española).
5. jsoup
Библиотека для парсинга и разбора HTML-страниц методами в стиле DOM, CSS и jQuery. Позволяет извлекать данные по URL, из локальных гипертекстовых файлов, фрагментов HTML-кода и даже из строковых переменных, содержащих разметку. Вы можете вытаскивать из страниц все ссылки или заголовки нужного уровня, управлять текстом и стилем, очищать код от атрибутов, добавленных в результате XSS-атак. Для отбора нужных данных вы можете увязать их с DOM-элементами и селекторами CSS.
6. JDOM
Инструмент, аналогичный предыдущему, но заточенный под обработку XML и интегрированный с Simple API. Ещё одна особенность — возможность автоматически создавать XML-документы на основе иерархии DOM-элементов.
7. Spring
Фреймворк позволяет создавать Java-приложения корпоративного уровня без обязательной привязки к конкретным платформам и окружению. Разработчики могут сконцентрироваться на бизнес-логике и на время отложить принятие решений по дизайну. Реализовать выбранную архитектуру помогает арсенал модулей для работы с транзакциями, сообщениями, реляционными базами данных, системами аутентификации и авторизации. Spring также упрощает тестирование, позволяет встраивать код на Groovy и Kotlin, «из коробки» поддерживает JDK 9.
8. Spring Boot
Для создания приложений на Spring нужно сначала настроить проект — создать его каркас и основу. Например, установить Tomcat или Jetty и подготовить конфигурационные XML-файлы. Эта рутина отнимает время и путает новичков. Spring Boot обеспечивает вам быстрый старт — базовые инструменты и настройки для проекта заложены во фреймворк по умолчанию. Недостающие бины добавляются автоматом на основе данных о classpath и текущей структуре проекта. Вы вносите пару зависимостей в pom.xml и переходите к написанию основного кода. Если надо, настройки можно менять с помощью аннотации @Configuration, но в большинстве случаев это не требуется. При таком подходе вы соберёте простое приложение в Maven или Gradle за 15 минут.
9. JFreeChart
Для быстрого создания диаграмм: круговых (в виде пирога) и линейных, плоскостных и объемных — а также графиков с маркерами и без. Вы начинаете с Maven-проекта, куда уже добавлены наглядные примеры и подробная документация. Набор атрибутов позволяет динамически настраивать вид диаграммы и её составляющих: фона, заголовков, осей и осевых меток. Библиотеку можно использовать в апплетах и сервлетах, а созданные изображения — сохранять в векторный SVG или растровые форматы PNG и JPEG.
10. JUnit
Бесплатный фреймворк для тестирования юнитов — классов, функций и других участков кода, реализующих конкретное поведение. Юнит-тестирование — инструмент, который меняет ваш подход к разработке больших приложений. Если вы ориентируетесь на юнит-тесты, вы учитесь строить сложную систему из небольших модулей. При таком подходе проще локализовывать ошибки и обеспечивать обратную совместимость кода.
С JUnit можно проводить многократное тестирование и выбирать процент покрытия кода. Важно помнить, что покрытие не всегда пропорционально выявляемости багов. Вы также можете группировать тесты и тестовые классы, выстраивать иерархию тестовых наборов, чтобы запускать несколько видов проверки одновременно или последовательно.
11. LJGL
В завершении обзора — плюшка для тех, кто хочет разрабатывать Java-игры. LJGL (Lightweight Java Game Library) — кроссплатформенная игровая библиотека с доступом к возможностям OpenGL, OpenAL и OpenCL. Библиотека позволяет управлять графикой, звуком, игровыми контроллерами разного типа. Целью создания LJGL был выход «за флажки» Java-платформы — работа с ресурсами, обычно недоступными джавистам. Библиотека используется в игровых Java-движках и фреймворках, таких как jPCT 3D для Android, LibGDX, Ardor3D.
Какие Java-библиотеки и фреймворки вы используете в своих проектах? Пожалуйста, делитесь опытом и не забывайте уточнять, чем именно вам нравится или не нравится библиотека.