Download the jdtls from the milestone https://download.eclipse.org/jdtls/milestones/?d Extract and put it in a folder that needs to be referenced when configuring Java LSP. I have placed the folder at /home/rahul/software/jdtls local jdtls = require 'jdtls' local project_name = vim.fn.fnamemodify(vim.fn.getcwd(), ':p:h:t') local workspace_dir = '/home/rahul/neo-java/' .. project_name local lsp_capabilities = require('cmp_nvim_lsp').default_capabilities() local bundles = { vim.fn.glob('/home/rahul/.local/share/nvim/mason/packages/java-debug-adapter/extension/server/com.microsoft.java.debug.plugin-0.53.0.jar', 1), } vim.list_extend(bundles, vim.split(vim.fn.glob('/home/rahul/.local/share/nvim/mason/packages/java-test/extension/server/*.jar', 1), '\n')) local config = { capabilities = lsp_capabilities, cmd = { '/home/rahul/.sdkman/candidates/java/current/bin/java', '-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=ALL', '-javaagent:/home/rahul/software/jdtls/lombok.jar', '-Xmx1g', '--add-modules=ALL-SYSTEM', '--add-opens', 'java.base/java.util=ALL-UNNAMED', '--add-opens', 'java.base/java.lang=ALL-UNNAMED', '-jar', '/home/rahul/software/jdtls/plugins/org.eclipse.equinox.launcher_1.6.900.v20240613-2009.jar', '-configuration', '/home/rahul/software/jdtls/config_linux/', '-data', workspace_dir, }, root_dir = require('jdtls.setup').find_root { '.git', 'mvnw', 'gradlew', 'pom.xml', 'build.gradle' }, settings = { java = { signatureHelp = { enabled = true }, contentProvider = { preferred = 'fernflower' }, completion = { favoriteStaticMembers = { 'org.hamcrest.MatcherAssert.assertThat', 'org.hamcrest.Matchers.*', 'org.hamcrest.CoreMatchers.*', 'org.junit.jupiter.api.Assertions.*', 'java.util.Objects.requireNonNull', 'java.util.Objects.requireNonNullElse', 'org.mockito.Mockito.*', }, filteredTypes = { 'com.sun.*', 'io.micrometer.shaded.*', 'java.awt.*', 'jdk.*', 'sun.*', }, }, sources = { organizeImports = { starThreshold = 9999, staticStarThreshold = 9999, }, }, codeGeneration = { toString = { template = '${object.className}{${member.name()}=${member.value}, ${otherMembers}}', }, hashCodeEquals = { useJava7Objects = true, }, useBlocks = true, }, }, }, handlers = { ['$/progress'] = function(_, result, ctx) -- disable progress updates. end, }, init_options = { extendedClientCapabilities = jdtls.extendedClientCapabilities, bundles = bundles, }, } jdtls.start_or_attach(config)