Lombok 在 Linux 上无法在自行安装的 STS 中工作——为什么我的构造函数无法识别 @Builder 注释
Lombok not working in self installed STS on Linux -- Why are my constructors not recognizing the @Builder annotation
使用:
Spring 开机
行家
龙目岛
STS 4.9
我有一个简单的构造函数,它接受 3 个参数并将它们分别分配给相应的字段。另一个字段是自动生成的,另外两个字段由 Spring 自动装配。显式定义的构造函数用 @Builder 注释(在构造函数级别,正如 Lombok 在文档中推荐的那样。)构造函数如下所示:
@Id
@GeneratedValue( )
@Column(value="account_id")
private Long accountId;
@Setter
@Column(value="user_id")
@ManyToOne
private Long userId;
@Setter
@Column(value="credentials")
@OneToOne
@PrimaryKeyJoinColumn(name="accountId")
private Credentials credentials;
@Setter
@Column(value="user_profile")
@OneToOne
@PrimaryKeyJoinColumn(name="accountId")
private UserProfileInfo userProfileInfo;
@Setter
@Column(value="account_credit")
@OneToOne
@PrimaryKeyJoinColumn(name="accountId")
@Autowired
private Credit acctCredit;
@Column(value="account_state")
@OneToOne
@PrimaryKeyJoinColumn(name="accountId")
@Autowired
private AccountState acctState;
@Builder
public Account(Long userId, Credentials cred, UserProfileInfo info){
this.userId = userId;
this.credentials = cred;
this.userProfileInfo = info;
}
就我所见,一切似乎都已检查 here.At 最起码,没有警告或错误。但是,当我尝试在别处使用 builder()
方法时,如下所示:
@Test
void testThreeArgConstructerReturnsProperObject() {
Account testAccount = Account.builder().build();
}
...就好像 @Builder
方法根本不存在一样。我在构建下得到了通常的红色下划线,但是用光标悬停只给出了在中声明一个新的 builder()
的选项
帐户 class。如果我从测试 class 中删除 builder()
,智能感知只会显示 Account.class
、super
和 this
。就好像注释不存在一样。
起初,我以为我以某种方式误用了它,因为我最近才开始使用它,但我已经检查了我的代码并与示例进行了几个小时的比较。据我所知,语法和用法都是正确的。
我也做了一些调试。除了检查 intellisense 之外,我还尝试在不同的范围内使用它,包括在同一个包中,我尝试了“最简单的形式”方法,我在其中更改了方法,因此它只有一个 int 参数。在每种情况下,我都无法让环境确认构造函数。
我是不是忽略了什么?
我终于明白了!龙目岛不工作的原因是我的电脑。自从切换到 PC 后我就没用过它。显然,Lombok 不喜欢 linux 上的 STS。为了让它工作,我必须通过一个不容易找到说明的过程手动安装,我最终找到了 here.
使用: Spring 开机 行家 龙目岛 STS 4.9
我有一个简单的构造函数,它接受 3 个参数并将它们分别分配给相应的字段。另一个字段是自动生成的,另外两个字段由 Spring 自动装配。显式定义的构造函数用 @Builder 注释(在构造函数级别,正如 Lombok 在文档中推荐的那样。)构造函数如下所示:
@Id
@GeneratedValue( )
@Column(value="account_id")
private Long accountId;
@Setter
@Column(value="user_id")
@ManyToOne
private Long userId;
@Setter
@Column(value="credentials")
@OneToOne
@PrimaryKeyJoinColumn(name="accountId")
private Credentials credentials;
@Setter
@Column(value="user_profile")
@OneToOne
@PrimaryKeyJoinColumn(name="accountId")
private UserProfileInfo userProfileInfo;
@Setter
@Column(value="account_credit")
@OneToOne
@PrimaryKeyJoinColumn(name="accountId")
@Autowired
private Credit acctCredit;
@Column(value="account_state")
@OneToOne
@PrimaryKeyJoinColumn(name="accountId")
@Autowired
private AccountState acctState;
@Builder
public Account(Long userId, Credentials cred, UserProfileInfo info){
this.userId = userId;
this.credentials = cred;
this.userProfileInfo = info;
}
就我所见,一切似乎都已检查 here.At 最起码,没有警告或错误。但是,当我尝试在别处使用 builder()
方法时,如下所示:
@Test
void testThreeArgConstructerReturnsProperObject() {
Account testAccount = Account.builder().build();
}
...就好像 @Builder
方法根本不存在一样。我在构建下得到了通常的红色下划线,但是用光标悬停只给出了在中声明一个新的 builder()
的选项
帐户 class。如果我从测试 class 中删除 builder()
,智能感知只会显示 Account.class
、super
和 this
。就好像注释不存在一样。
起初,我以为我以某种方式误用了它,因为我最近才开始使用它,但我已经检查了我的代码并与示例进行了几个小时的比较。据我所知,语法和用法都是正确的。
我也做了一些调试。除了检查 intellisense 之外,我还尝试在不同的范围内使用它,包括在同一个包中,我尝试了“最简单的形式”方法,我在其中更改了方法,因此它只有一个 int 参数。在每种情况下,我都无法让环境确认构造函数。
我是不是忽略了什么?
我终于明白了!龙目岛不工作的原因是我的电脑。自从切换到 PC 后我就没用过它。显然,Lombok 不喜欢 linux 上的 STS。为了让它工作,我必须通过一个不容易找到说明的过程手动安装,我最终找到了 here.