Как подключить lombok к idea

Lombok – установка и настройка

Зачастую язык Java критикуют за излишнюю многословность – при объявлении класса приходится создавать геттеры и сеттеры для каждого необходимого поля, создавать конструкторы, переопределять методы toString, а также связку equals/hashCode. В современных IDE, конечно же, есть возможность всё это генерировать полуавтоматически, но необходимость заниматься шаблонным кодом всё равно никуда не исчезает. Проект Lombok призван бороться с этой проблемой.

Что такое Lombok

Lombok – это Java библиотека, призванная освободить разработчика от написания шаблонного кода. Lombok берёт на себя генерирование шаблонного кода по специальным аннотациям, которые указываются программистом в зависимости от того, какой код он хочет сгенерировать.

Установка Lombok

Установка состоит из двух этапов:

Здесь мы будем использовать Maven и IntelliJ IDEA.

Подключение библиотеки Lombok в Maven

Добавьте в pom.xml следующую зависимость:

В случае, если вы используете Java 9 с module-info.java, добавьте следующую конфигурацию в pom.xml:

Последняя версия Lombok: Как подключить lombok к idea

Установка плагина в IDEA

Откройте меню File → Settings → Plugins

В открывшемся окне плагинов введите «Lombok» в строке поиска а нажмите кнопку «Install»:

Как подключить lombok к idea

Подтвердите установку («Accept») и перезагрузите IDEA, чтобы плагин активировался.

Заключение

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

Источник

Добавление плагина Lombok в проект IntelliJ

Я пытаюсь добавить Lombok в свой проект Spring Boot в IntelliJ IDEA. Пока что у меня есть

добавил compile(‘org.projectlombok:lombok’) в мои зависимости Gradle

включена обработка аннотаций

Он по-прежнему не распознает ни импорт Lombok, ни аннотации.

Что мне не хватает?

Решено:

Мне пришлось запустить обновление для моего файла Gradle.

6 ответов

Вам необходимо включить обработку аннотаций в IntelliJ IDEA

> Settings > Build, Execution, Deployment > Compiler > Annotation Processors

Как подключить lombok к idea

Чтобы добавить плагин Lombok IntelliJ для добавления поддержки IntelliJ для ломбоков:

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

Как подключить lombok к idea

Я только что нашел, как.

Если после установки lombok intellij plugin и включения обработки аннотаций, если ваш получатель и установщики по-прежнему не распознаются в intellij, проверьте, не Версия plugin совместима с версией intellij вы используете.

Он указан в разделе загрузок здесь:

Для меня это не сработало после выполнения всех шагов, предложенных в вопросе и в верхнем ответе. Изначально импорт не работал, а затем, когда я перезапустил IntelliJ, я получил эти сообщения из плагина Gradle:

Это было странно, потому что я не разрабатываю для Android, просто использую IntelliJ для Mac OS.

Чтобы быть справедливым, мой файл build.gradle содержал эти строки в dependencies раздел, который я скопировал у коллеги:

Плагин Gradle, облегчающий /более безопасный использование процессоров аннотаций Java

Источник

Проект Lombok, или Объявляем войну бойлерплейту

Подключаем Lombok

Lombok использует механизм процессинга аннотаций из Java 6, из чего следуют его минимальные требования к окружению. Для подключения Lombok к проекту достаточно включить его в зависимости. В случае использования Maven это делается следующим образом:

Для большей части функциональности Lombok эта библиотека необходима только на этапе компиляции. Последняя версия Lombok на текущий момент (0.11.0) ещё не попала в центральный репозиторий Maven, однако её без проблем можно установить в локальный или корпоративный репозиторий, скачав с сайта.

Прощаемся с аксессорами

Одним из главных источников бойлерплейта в Java является отсутствие свойств на уровне языка. Во соблюдение принципов ООП на каждое объявление поля приходится писать как минимум шесть типовых строк — геттер и сеттер. Некоторые библиотеки, вроде Spring или Tapestry, для своих целей в некоторых случаях позволяют разработчику забыть про аксессоры, вставляя их самостоятельно в байт-код. Подобную функциональность предлагает и Lombok.

Параметр lazy=true аннотации Getter позволяет реализовать ленивую инициализацию поля: вызов метода initMap() в данном случае будет отложен до первого вызова геттера и обёрнут в потокобезопасную инициализацию в виде блокировки с двойной проверкой.

Деструкция конструкторов

Конструкторы POJO-классов тоже не отличаются сложностью и разнообразием — чаще всего нам необходимо что-либо из этого списка: конструктор без параметров, конструктор со всеми параметрами, конструктор только с некоторыми обязательными параметрами, статический factory-метод. Lombok легко справляется с этой задачей с помощью аннотаций @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor и параметра staticName соответственно.

Вот что мы получим в результате:

Генерируем типовые методы: toString, hashCode, equals

О правильной реализации методов equals и hashCode написано достаточно много — пожалуй, стоит по этому поводу вспомнить «Effective Java» Блока и статью Одерски. Вкратце можно сказать, что реализовать их корректно — непросто, поддерживать в актуальном состоянии — ещё сложнее, а занимать они вполне могут добрую половину класса. Метод toString не так критичен для корректности кода, но актуализировать его каждый раз при изменении класса — тоже приятного мало. Предоставим возможность Lombok сделать за нас эту неблагодарную работу с помощью двух нехитрых аннотаций:

Логгер-невидимка

Если вы пользуетесь одной из популярных библиотек протоколирования, то, вероятнее всего, в каждом классе у вас присутствует статическое объявление логгера:

Вместо этого Lombok предлагает воспользоваться аннотациями Log, @CommonsLog, @Log4j или @Slf4j — в зависимости от предпочитаемого средства протоколирования:

Финализируем локальные переменные

Хорошим стилем программирования является использование финальных локальных переменных, однако, учитывая статическую типизацию и отсутствие в Java выведения типов, объявление какой-нибудь особенно навороченной карты вполне может вылезть за пределы экрана. Если с Java переходить на Scala или Groovy пока не хочется, то можно воспользоваться следующим хаком Lombok:

Переменная map в данном случае будет объявлена как final, в то же время описание её типа будет взято из правой части выражения присваивания.

Безнаказанно бросаем исключения

Далеко не все разработчики, к сожалению, читали уже упоминавшуюся здесь «Effective Java» Блока или «Robust Java» Стелтинга. А может, читали, но не очень внимательно. Или, возможно, у них и впрямь была какая-то вполне обоснованная мотивация объявить вот это конкретное исключение проверяемым — но вам от этого не легче, ведь вы-то знаете, что оно не возникнет никогда! Что делать, например, с UnsupportedEncodingException, если вы абсолютно уверены, что без системной поддержки кодировки UTF-8 ваше приложение всё равно работать не будет? Приходится заключать код в try-catch и писать бессмысленный вывод в лог, который никогда не дождётся своего часа, переоборачивать исключение в runtime-обёртку, которой не суждено появиться на свет, или и вовсе игнорировать пустым блоком перехвата (который, не знаю, как у вас, а у меня лично всегда вызывает желание схватиться за револьвер). Lombok и здесь предлагает альтернативу.

Для этого колдунства, в отличие от всего прочего, понадобится подключить Lombok в рантайме. Всё просто: Lombok усыпляет бдительность компилятора, перехватывая исключение в try, а затем в рантайме незаметно перевыбрасывает его в catch. Фишка в том, что на уровне байт-кода можно выбросить любое исключение, даже то, которое не объявлено в сигнатуре метода.

Правильная синхронизация

Многопоточность — весьма сложная область программирования, имеющая в Java свою идиоматику и паттерны. Одной из правильных практик является использование для синхронизации приватных финальных полей, так как на любом общедоступном локе может пожелать синхронизироваться какой-либо не связанный кусок функциональности, что приведёт к ненужным блокировкам и трудно отлавливаемым ошибкам. Lombok умеет корректно синхронизировать содержимое метода, отмеченного аннотацией @Synchronized — как статического, так и метода экземпляра:

А что на это скажет IDE?

Все эти замечательные фишки ничего бы не стоили, если бы при открытии проекта в Eclipse или IntelliJ IDEA строчки кода разгорались бы красным пламенем от праведного гнева компилятора. К счастью, интеграция со средами разработки имеется, и достаточно неплохая. Для IntelliJ IDEA плагин присутствует в стандартном репозитории:

Как подключить lombok к idea

Для Eclipse и NetBeans установка немного необычная. Необходимо запустить файл lombok.jar, и он покажет симпатичный инсталлятор, предлагающий накатить Lombok на существующие инсталляции Eclipse:

Как подключить lombok к idea

Указанные плагины не только убеждают среду разработки в том, что отсутствие геттеров, сеттеров и прочих элементов бойлерплейта ей только чудится — они ещё и корректно подсвечивают ошибочные ситуации, например, когда геттер, которому надлежит быть сгенерированным, уже присутствует в классе:

Как подключить lombok к idea

Я перечислил основные фишки Lombok, однако это ещё не всё. Более подробно все возможные аннотации со всеми атрибутами и со сравнением кода «до» и «после» описаны в документации.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *