Maven Scope для Ломбока (компиляция против предоставленного)

Недавно я узнал, что lombok.jar попадает в наш последний артефакт, который не должен быть необходимым. В моем понимании ломбок только время компиляции.

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.14.4</version>
        </dependency>

Но когда я устанавливаю его в предоставленную область, я получаю странное поведение в модульных тестах. Они разбиваются с помощью ClassNotFoundExceptions, а затем при попытке разрешить

java.lang.NoClassDefFoundError: com/svv/esp/serviceimpl/dataimport/common/validation/LongValidator

Какая область maven обычно используется для lombok?

Я использую Oracle JDK build 1.8.0_25-b17 на MacOSX 10.9

Ответ 1

Ломбок должен использоваться в области provided (см. официальные документы).

Причина (как было указано в комментариях) заключается в том, что lombok - это инструмент времени только для компиляции. То есть, это не требуется во время выполнения вообще. Сделав область provided, вы создадите библиотеки lombok для компилятора, но это не зависимость вашей скомпилированной банки. Таким образом, ваша последняя банка не будет зависеть от Lombok, и ее не нужно включать в какое-либо развертывание, что уменьшает зависимости и размер ваших развертываемых компонентов.

Ответ 2

Обычно compile. provided предназначен для баннеров, которые обычно поставляются с сервером приложений, на котором будет размещено приложение. Если вы не хотите использовать банку в последнем приложении, возможно, лучше всего использовать плагин maven, а не банку: http://awhitford.github.io/lombok.maven/lombok-maven-plugin/index.html