Neovim 下 jdtls 报错“The method XXXXXX of type XXXXXXXXX must override a superclass method.”

nvim-jdtls

Neovim 内置 LSP 支持的插件,针对 java 语言提供 lsp 服务。

安装

Neovim (>= 0.6.0) 使用 Packer:

use 'mfussenegger/nvim-jdtls'

安装及相关配置可参考该文章:neovim使用nvim-jdtls搭建Java IDE_ITKEY_的博客-CSDN博客

项目主页:
mfussenegger/nvim-jdtls: Extensions for the built-in LSP support in Neovim for eclipse.jdt.ls (github.com)

eclipse/eclipse.jdt.ls: Java language server (github.com)
————————————————————————————

问题描述

今日在使用 nvim 学习 java 的时候遇到一个问题:当使用 @Override 标注一个在 interface 中声明的 public method 时,lsp 报错:The method XXXXXX of type XXXXXXXXX must override a superclass method.

查阅相关资料可知,在 jdk1.5 下要使用 @Override 这个 annotation 必须保证被标注方法来源于 class 而不是 interface,而 eclipse 的默认 JDK compiler compliance level 是 1.5。

若要使用 @Override 标注在 interface 中声明的方法,则至少需要将 JDK compiler compliance level 提高至 1.6。

解决方案

虽然本人并不了解 jdtls 作为一个 lsp 运行的原理,不过既然该服务是 eclipse 的一个扩展,那么合理推测该 lsp 服务使用的默认 compiler compliance level 同样被设置成了 1.5,导致该错误的产生。

查阅相关资料可知,在没有图形界面的情况下,用户可以通过修改项目文件夹下 ".settings" 文件夹中的 "org.eclipse.jdt.core.prefs" 文件来更改 compiler compliance,且修改后的配置将会覆盖全局。

在更改了项目中 "org.eclipse.jdt.core.prefs" 文件内的如下配置并重启 nvim 之后,问题解决。

...
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.compliance=1.6
...
org.eclipse.jdt.core.compiler.source=1.6

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值