nvim/lua/user/lsp_servers/jdtls.lua
Prabhat Maurya 203159cee6 update
2026-01-29 07:43:21 +05:30

75 lines
2.3 KiB
Lua

-- lua/user/lsp_servers/jdtls.lua
-- Get capabilities for nvim-cmp
local capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities())
-- Java binary (ensure it's Java 21)
local java_bin = "/usr/lib/jvm/java-21-openjdk/bin/java"
-- JDTLS paths (Mason-managed)
local jdtls_path = "/home/prabhat/.local/share/nvim/mason/packages/jdtls"
local jdtls_launcher_jar = vim.fn.glob(jdtls_path .. "/plugins/org.eclipse.equinox.launcher_*.jar")
local lombok_jar = vim.fn.glob(jdtls_path .. "/lombok.jar")
-- Setup JDTLS
vim.lsp.config("jdtls", {
cmd = {
java_bin,
"-Declipse.application=org.eclipse.jdt.ls.core.id1",
"-Dosgi.bundles.defaultStartLevel=4",
"-Declipse.product=org.eclipse.jdt.ls.core.product",
"-Dlog.protocol=true",
"-Dlog.level=INFO",
"-Xmx2G",
"-Xms256m",
"--add-modules=ALL-SYSTEM",
"--add-opens", "java.base/java.util=ALL-UNNAMED",
"--add-opens", "java.base/java.lang=ALL-UNNAMED",
"-javaagent:" .. lombok_jar,
"-jar", jdtls_launcher_jar,
"-configuration", jdtls_path .. "/config_linux",
"-data", vim.fn.stdpath("data") .. "/jdtls-workspace/" .. vim.fn.fnamemodify(vim.loop.cwd(), ":p:h:t"),
},
capabilities = capabilities,
root_dir = function()
local root_files = { ".git", "mvnw", "gradlew", "pom.xml", "build.gradle" }
local found = vim.fs.find(root_files, { upward = true })[1]
return found and vim.fs.dirname(found) or vim.loop.cwd()
end,
settings = {
java = {
completion = {
favoriteStaticMembers = {
"org.junit.jupiter.api.Assertions.*",
"org.mockito.Mockito.*",
"java.util.Objects.requireNonNull",
"java.util.Objects.requireNonNullElse",
},
filteredTypes = {
"com.sun.*",
"io.micrometer.shaded.*",
"java.awt.*",
"jdk.*",
"sun.*",
},
},
import = {
exclusions = { "**/internal/**" },
maven = { enabled = true, downloadSources = true },
gradle = { enabled = true },
settings = {
importOrder = { "java", "javax", "org", "com" },
},
},
inlayHints = { parameterNames = { enabled = "all" } },
format = {
enabled = true,
settings = { url = jdtls_path .. "/eclipse-formatter.xml" },
},
},
},
})