Почему я должен добавить плагин Lombok, почему недостаточно добавить зависимость - PullRequest
0 голосов
/ 05 сентября 2018

Мне любопытно, почему я должен добавить плагин Lombok. Почему добавления зависимости к pom.xml недостаточно, как, например, в Mockito?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Lombok - это так называемый процессор аннотаций , Mockito - «просто» обычная библиотека Java. Аннотирование процессоров

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

javac , Java-компилятор, поставляемый с JDK, автоматически обнаруживает обработчики аннотаций в пути к классам и вызывает их, чтобы они могли обрабатывать свои аннотации и генерировать код. Поэтому, когда вы добавляете Lombok в ваш pom.xml и вызываете mvn package (который вызывает javac), все в порядке: Lombok теперь находится на пути к классам и вызывается javac, и вы можете использовать аннотации Lombok в своем коде.

Основная цель javac - скомпилировать действительный код Java в байт-код. Однако при написании кода Java большую часть времени код недействителен . Таким образом, расширенные IDE, такие как Eclipse или IntelliJ IDEA, помогают разработчикам, даже если их код не компилируется. Если бы они просто использовали javac в качестве единственного средства анализа и компиляции кода Java, они бы не сильно помогли разработчику. Такие функции, как схема кода, анализ зависимостей, поиск цели вызова метода и т. Д., Также должны работать с недопустимым кодом как можно лучше.

Для достижения этого Eclipse и IntelliJ IDEA имеют свои собственные компиляторы Java. Например, компилятор Eclipse использует совершенно другое представление абстрактного синтаксического дерева кода (AST). И это в основном AST, на котором работает Lombok. Поэтому у Lombok есть два обработчика аннотаций для каждой аннотации: одна для javac, другая для Eclipse. И именно поэтому Lombok должен быть установлен в Eclipse: , чтобы иметь возможность подключаться к внутреннему компилятору Eclipse .

0 голосов
/ 05 сентября 2018

Вы должны понять, как на самом деле работает Ломбок.

Здесь есть две части:

  • аннотации, такие как @Data, @ToString, ...
  • тот «плагин», который на самом деле генерирует соответствующий код

Вам нужна зависимость от lombok, чтобы компилятор / IDE мог разрешать аннотации самостоятельно. (аннотации необходимо импортировать, как и любой другой «элемент», который вы используете в своем исходном коде). Но это только гарантирует, что ваш компилятор / IDE знает , что это допустимые аннотации.

Реальная хитрость заключается в том, что позже, когда код скомпилирован в файлы классов, эта «активная» часть lombok доступна для фактического генерации кода.

Это похоже на валидацию Java-бина . Вам нужно импортировать один JAR во время компиляции, чтобы все различные аннотации валидации были известны и могли использоваться в вашем исходном коде. Но для того, чтобы объекты были активно проверены, вам позже понадобится какой-то другой компонент, который делает это (разница здесь в том, что проверка происходит во время выполнения, тогда как Lombok - это только время компиляции).

И, пожалуйста, обратите внимание: второй способ «использования / обработки аннотаций» является более распространенным. В вашем примере о JUnit и @RunWith: эта аннотация говорит JUnit в среде выполнения использовать этот класс бегуна mockito (вместо его собственной реализации бегуна). И этот бегун mockito знает, что делать во время выполнения со всеми остальными аннотациями. Та же самая история: аннотации, присутствующие в исходном коде, должны быть известны, для активной части, некоторый компонент делает вещи во время выполнения.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...