java - 为什么 hibernate 验证会破坏 lombok 依赖项的编译?

标签 java hibernate-validator lombok

这是带有 lombok 的 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 validator 添加到 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 验证如何以及为何影响 lombok?
  2. 如何解决这个问题?

最佳答案

在此示例中,我指定应在 MapStruct 处理器之前使用 Lombok 注释处理器:

<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>

关于java - 为什么 hibernate 验证会破坏 lombok 依赖项的编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53535519/

相关文章:

jsf - 如何将 Hibernate Validator 与 Primefaces 客户端站点验证 (CSV) 结合使用

dependencies - 休眠验证 "Unable to initialize javax.el.ExpressionFactory"错误

java - Netbeans 项目引用问题

java - Android JSON API 调用

java - 在 processing.js 中获取移动椭圆的当前位置

guice - 制作自定义 @Inject 注释

java - 如何使用 lombok 配置 getter-only-lazy-initializing 集合字段?

java - ClassCastException : java. lang.Object[] 无法转换为 java.lang.String[] android

java - ConstraintValidator 不起作用(我该怎么做?)

java - Lombok @Slf4j - 记录到文件