文章目录
- 通用方式自动化配置Java LSP
- 手动配置
- JDK版本选择
- 配置
- 解压jdt-language-server
- 配置环境变量
- 我的配置分享
- neovim使用nvim-jdtls搭建Java IDE
通用方式自动化配置Java LSP
可以使用以下插件自动化配置。推荐新手使用这个方法。
https://github.com/williamboman/nvim-lsp-installer
这个方式简单方便,适应于大部分朋友。
这个方便可以参考《09_[nvim0.5+从0单排]_nvim内置lsp搭建python IDE》
https://blog.csdn.net/lxyoucan/article/details/120708396
本文就不重点介绍了。比起傻瓜式的配置,有不少朋友喜欢手动配置,毕竟这样更有挑战,更干净。
手动配置
手动配置的话,有两个lsp可供选择:
- https://github.com/georgewfraser/java-language-server
- https://projects.eclipse.org/projects/eclipse.jdt.ls
两种方式都行,我选择的是eclipse.jdt.ls
,为什么选这个。其实我没有去进行对比,只是主观的感觉eclipse毕竟深耕多年,感觉更可靠的感觉。感觉以前我使用coc的时候也用的是eclipse.jdt.ls
那么我们主要就是参考这篇文档来手动配置:
https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#jdtls
JDK版本选择
这里有一个小坑,就是JDK的版本要选择JDK11及以上版本才行。因为就目前来看,JDK8使用的概率还是非常高的。
如果你使用JDK8,使用java文件会报如下的错误:
Client 1 quit with exit code 1 and signal 0
推荐使用JDK11,因为我实测JDK11是正常使用的,其他版本的JDK我没有一一测试。
我的版本信息如下:
java -version
java version "11.0.10" 2021-01-19 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.10+8-LTS-162)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.10+8-LTS-162, mixed mode)
配置
解压jdt-language-server
下载jdt-language-server
不同版本下载导航
https://download.eclipse.org/jdtls/milestones/?d
我最终下载的版本是:
https://download.eclipse.org/jdtls/milestones/1.9.0/jdt-language-server-1.9.0-202203031534.tar.gz
以下我的路径是个人喜好,可以根据自己的实际情况修改保存路径:
mkdir -p ~/.local/share/nvim/lsp/jdt-language-server/workspace
cd ~/.local/share/nvim/lsp/jdt-language-server
wget https://download.eclipse.org/jdtls/milestones/1.9.0/jdt-language-server-1.9.0-202203031534.tar.gz
tar -zxvf jdt-language-server-1.9.0-202203031534.tar.gz
我的目录结构如下图所示
配置环境变量
修改你的环境变量配置文件,bash的配置文件是nvim ~/.bashrc
如果你用的是zsh则nvim ~/.zshrc
export JDTLS_HOME=$HOME/.local/share/nvim/lsp/jdt-language-server/
export WORKSPACE=$HOME/.local/share/nvim/lsp/jdt-language-server/workspace/
export JAVA_HOME=$HOME/.jdks/corretto-11.0.14.1/
export PATH=$JAVA_HOME/bin:$PATH:.
在你的lua配置中增加以下一行配置:
require'lspconfig'.jdtls.setup{}
至此Java语言补全已经成功配置完成了,是不是挺简单的。
打开项目在状态栏中会显示lsp server的加载状态,稍等片刻等它加载完成了,我们就可以语法提示啦。
语法检查也没有问题的。
至此最基本的配置就结束了。
我的配置分享
每个人的使用习惯都不相同,我把常用的快捷键进行了映射,供大家参考。
<space>rn
变量重命名<leader>f
代码格式化- 保存自动格式化
等等。
我的配置文件:~/.config/nvim/lua/lspconf/java.lua
全部内容如下,仅大家参考:
local nvim_lsp = require("lspconfig")
Itkey_on_attach = function(client, bufnr)
local function buf_set_keymap(...)
vim.api.nvim_buf_set_keymap(bufnr, ...)
end
local function buf_set_option(...)
vim.api.nvim_buf_set_option(bufnr, ...)
end
buf_set_option("omnifunc", "v:lua.vim.lsp.omnifunc")
local opts = {noremap = true, silent = true}
buf_set_keymap("n", "gD", "<Cmd>lua vim.lsp.buf.declaration()<CR>", opts)
buf_set_keymap("n", "gd", "<Cmd>lua vim.lsp.buf.definition()<CR>", opts)
buf_set_keymap("n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
buf_set_keymap("n", "<space>wa", "<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>", opts)
buf_set_keymap("n", "<space>wr", "<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>", opts)
buf_set_keymap("n", "<space>wl", "<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>", opts)
buf_set_keymap("n", "<space>D", "<cmd>lua vim.lsp.buf.type_definition()<CR>", opts)
buf_set_keymap("n", "<space>rn", "<cmd>lua vim.lsp.buf.rename()<CR>", opts)
buf_set_keymap("n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
buf_set_keymap("n", "<space>e", "<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>", opts)
buf_set_keymap("n", "<S-C-j>", "<cmd>lua vim.lsp.diagnostic.goto_next()<CR>", opts)
buf_set_keymap("n", "<space>q", "<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>", opts)
buf_set_keymap("n", "<leader>f", "<cmd>lua vim.lsp.buf.formatting()<CR>", opts)
if client.resolved_capabilities.document_formatting then
vim.api.nvim_command [[autocmd BufWritePre <buffer> lua vim.lsp.buf.formatting_seq_sync()]]
end
end
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities.textDocument.completion.completionItem.documentationFormat = {"markdown", "plaintext"}
capabilities.textDocument.completion.completionItem.snippetSupport = true
capabilities.textDocument.completion.completionItem.preselectSupport = true
capabilities.textDocument.completion.completionItem.insertReplaceSupport = true
capabilities.textDocument.completion.completionItem.labelDetailsSupport = true
capabilities.textDocument.completion.completionItem.deprecatedSupport = true
capabilities.textDocument.completion.completionItem.commitCharactersSupport = true
capabilities.textDocument.completion.completionItem.tagSupport = {valueSet = {1}}
capabilities.textDocument.completion.completionItem.resolveSupport = {
properties = {
"documentation",
"detail",
"additionalTextEdits"
}
}
Itkey_capabilities = capabilities
require "lspconfig".jdtls.setup {
on_attach = Itkey_on_attach,
capabilities = Itkey_capabilities
}
neovim使用nvim-jdtls搭建Java IDE
https://blog.csdn.net/lxyoucan/article/details/123448313
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)