Neovim Configuration that makes JDTLS work
JDTLS: The Eclipse JDT Language Server
JDTLS, the Eclipse JDT Language Server, is a Java language specific implementation of the Language Server Protocol. It can be used with any editor that supports the protocol, providing robust support for the Java language. This allows developers to leverage features such as code completion, refactoring, and error checking, enhancing their productivity and coding experience.
Configuring JDTLS with Neovim
While JDTLS offers great features, getting it to work with Neovim is not straightforward. Manual configuration is required to ensure that the language server integrates seamlessly with the editor. Below are the configurations needed to set up JDTLS in Neovim.
Plugin Configuration: lua/plugins/jdtls.lua
return {
"mfussenegger/nvim-jdtls",
ft = {"java"},
config = function()
require('jdtls').start_or_attach(require("configs.jdtls"))
end,
}
JDTLS Configuration: lua/configs/jdtls.lua
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities.textDocument.completion.completionItem.snippetSupport = true
local root_directory = "/home/mihamina/Projects/padeir-edbm-parser/web-scraper"
local on_attach = function(client, bufnr)
local function buf_set_keymap(...)
vim.api.nvim_buf_set_keymap(bufnr, ...)
end
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
local opts = { noremap=true, silent=true }
buf_set_keymap("n", "gd", "Telescope lsp_definitions", opts)
buf_set_keymap("n", "gr", "Telescope lsp_references", opts)
end
local config = {
cmd = {
'/home/mihamina/Apps/java/bin/java',
'-Declipse.application=org.eclipse.jdt.ls.core.id1',
'-Dosgi.bundles.defaultStartLevel=4',
'-Xmx8g',
'-Declipse.product=org.eclipse.jdt.ls.core.product',
'-Dlog.protocol=true',
'-Dlog.level=ALL',
'--add-modules=ALL-SYSTEM',
'--add-opens', 'java.base/java.util=ALL-UNNAMED',
'--add-opens', 'java.base/java.lang=ALL-UNNAMED',
'-jar', '/home/mihamina/Apps/jdt-language-server/plugins/org.eclipse.equinox.launcher_1.6.900.v20240613-2009.jar',
'-configuration','/home/mihamina/Apps/jdt-language-server/config_linux',
'-data', root_directory
},
root_dir = root_directory,
capabilities = capabilities,
on_attach = on_attach,
settings = {
java = {
signatureHelp = { enabled = true },
completion = {},
sources = {},
codeGeneration = {
toString = {
template = "${object.className}{${member.name()}=${member.value}, ${otherMembers}}",
},
},
},
},
}
return config