我刚刚将我的Spring Boot 1.5.13应用程序(带有Lombok)升级到了Spring Boot 1.5.14,但现在无法编译并出现以下类型的错误:
constructor SomeClass() is already defined in class SomeClass
对于我的每个POJO,例如
@Data
@NoArgsConstructor
public class SomeClass {
private String someProperty;
}
答案 0 :(得分:10)
这是Lombok 1.6.22中的错误;将龙目岛升级到1.18.0:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
<scope>provided</scope>
</dependency>
,或者作为一种变通方法,更改批注的顺序:
@NoArgsConstructor
@Data
public class SomeClass {
private String someProperty;
}
详细信息:
此错误的根本原因是Lombok 1.16.22中的错误。 Spring Boot 1.5.13使用没有此bug的Lombok 1.16.20,但是Spring Boot 1.5.14将Lombok依赖关系更新为1.16.22-不幸的是,Lombok项目不符合SEMVER并随后触发这个错误。
答案 1 :(得分:0)
即使在最新版本(即
)中,我也遇到了这个问题<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
<scope>provided</scope>
</dependency>
将成员变量标记为final后,一切正常。
@RequiredArgsConstructor
生成一个带有必需参数的构造函数,其中必需参数是最终字段和用@NonNull
注释的字段(稍后会详细介绍)
答案 2 :(得分:0)
我使用以下方法重现了同样的问题:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
而且,就我而言,这是 @NoArgsConstructor
注释和 @Data
之间的冲突。
后来证明:
<块引用>@Data 暗示@NoArgsConstructor
因此,the advice 用于删除 @NoArgsConstructor
注释,但保留 @Data
对我很有帮助。