@Value - lombok 和 mapstruct 到另一个 @value 对象
@Value - lombok and mapstruct to another @value object
当我将 JSON Lombok @Value DTO 映射到 JPA @Value 实体 class 时,反之亦然,编译抛出异常。
"does not have an accessible parameterless constructor"
Java 11、hibernate、spring boot 5、Lombok 和 map struct 1.3.1 正在使用中。
使用的 MapStruct 版本需要一个 parameterless/no-argument 构造函数(c.f https://github.com/mapstruct/mapstruct/issues/73)。
您需要使用 MapStruct 版本 1.4.0.Beta1;或者创建一个无参数的构造函数并且不使用@Value。
修改 Maven/Gradle 文件中注释处理器路径的顺序可解决该问题。只要确保 Lombok 应该在 Mapstruct 之后。
使用Gradle:
dependencies {
...
annotationProcessor("org.mapstruct:mapstruct-processor")
annotationProcessor("org.projectlombok:lombok") <<=== Lombok after mapstruct
...
}
使用 Maven:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin-version}</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
<useIncrementalCompilation>false</useIncrementalCompilation>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct-version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId> <<=== Lombok after Mapstruct
<artifactId>lombok</artifactId>
<version>${lombok-version}</version>
</path>
</annotationProcessorPaths>
</configuration>
<plugin>
我会在您的 class 之前添加以下 Lombok 注释:
@Value( staticConstructor = "of" )
@With
@Builder
此外,如果您希望 Lombok 为所有 @Value 注释的 classes 添加一个 no-args 构造函数,您需要添加进入你的 lombok.config 文件:
lombok.noargsconstructor.extraprivate=true
当我将 JSON Lombok @Value DTO 映射到 JPA @Value 实体 class 时,反之亦然,编译抛出异常。
"does not have an accessible parameterless constructor"
Java 11、hibernate、spring boot 5、Lombok 和 map struct 1.3.1 正在使用中。
使用的 MapStruct 版本需要一个 parameterless/no-argument 构造函数(c.f https://github.com/mapstruct/mapstruct/issues/73)。
您需要使用 MapStruct 版本 1.4.0.Beta1;或者创建一个无参数的构造函数并且不使用@Value。
修改 Maven/Gradle 文件中注释处理器路径的顺序可解决该问题。只要确保 Lombok 应该在 Mapstruct 之后。
使用Gradle:
dependencies {
...
annotationProcessor("org.mapstruct:mapstruct-processor")
annotationProcessor("org.projectlombok:lombok") <<=== Lombok after mapstruct
...
}
使用 Maven:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin-version}</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
<useIncrementalCompilation>false</useIncrementalCompilation>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct-version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId> <<=== Lombok after Mapstruct
<artifactId>lombok</artifactId>
<version>${lombok-version}</version>
</path>
</annotationProcessorPaths>
</configuration>
<plugin>
我会在您的 class 之前添加以下 Lombok 注释:
@Value( staticConstructor = "of" )
@With
@Builder
此外,如果您希望 Lombok 为所有 @Value 注释的 classes 添加一个 no-args 构造函数,您需要添加进入你的 lombok.config 文件:
lombok.noargsconstructor.extraprivate=true