Почему проверка гибернации нарушает компиляцию с зависимостью lombok? - PullRequest
0 голосов
/ 29 ноября 2018

Вот пример POJO с ломбоком (версия 1.16.22):

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.Builder;
import lombok.Value;

@Value
@Builder
@JsonDeserialize(builder = MyClass.MyClassBuilder.class)    
public MyClass {
    private final Long id;    
}

Здесь все отлично работает.Но после того, как валидатор hibernate был добавлен в pom.xml:

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.10.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator-annotation-processor</artifactId>
    <version>6.0.10.Final</version>
</dependency>

Я получил исключение во время maven компиляции процесса:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project my-impl: Compilation failure: Compilation failure:      
[ERROR] /C:/path/MyClass.java:[12,42] cannot find symbol
[ERROR] symbol:   class MyClassBuilder
[ERROR] location: class my_package.MyClass
  1. Как и почему hibernateпроверка влияет на Lombock?
  2. Как это исправить?

1 Ответ

0 голосов
/ 29 ноября 2018

В этом примере я указываю, что процессор аннотаций Lombok должен использоваться перед процессором MapStruct:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.7.0</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <annotationProcessorPaths>
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.16.20</version>
            </path>
            <path>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>1.2.0.Final</version>
            </path>
        </annotationProcessorPaths>
        <compilerArgs>
            <compilerArg>
                -Amapstruct.defaultComponentModel=cdi
            </compilerArg>
        </compilerArgs>
    </configuration>
</plugin>

Я думаю, что аналогичным образом вы можете указать порядок для Lombok и Hibernate Validator.

Я думаю, что это то, что вам нужно:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.7.0</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <annotationProcessorPaths>
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.16.22</version>
            </path>
            <path>
                <groupId>org.hibernate.validator</groupId>
                <artifactId>hibernate-validator-annotation-processor</artifactId>
                <version>6.0.10.Final</version>
            </path>
        </annotationProcessorPaths>
    </configuration>
</plugin>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...