-- See `:help vim.lsp.start_client` for an overview of the supported `config` options. local config = { -- The command that starts the language server -- See: https://github.com/eclipse/eclipse.jdt.ls#running-from-the-command-line autostart = true, -- autostart = false, cmd = { --[[ usage: jdtls [-h] [--validate-java-version | --no-validate-java-version] [--jvm-arg JVM_ARG] [-data DATA] options: -h, --help show this help message and exit --validate-java-version, --no-validate-java-version --jvm-arg JVM_ARG An additional JVM option (can be used multiple times. Note, use with equal sign. For example: --jvm-arg=-Dlog.level=ALL -data DATA ]] 'jdtls', '-configuration', '/Users/nige/.cache/jdtls/config', -- '-data', '/Users/nige/.cache/jdtls/workspace' -- 'jdtls', -- '--jvm-arg=-Declipse.application=org.eclipse.jdt.ls.core.id1', -- '--jvm-arg=-Dosgi.bundles.defaultStartLevel=4', -- '--jvm-arg=-Declipse.product=org.eclipse.jdt.ls.core.product', -- '--jvm-arg=-Dlog.protocol=true', -- '--jvm-arg=-Dlog.level=ALL', -- '--jvm-arg=-Xms1g', -- '--jvm-arg=--add-modules=ALL-SYSTEM', -- '--jvm-arg=--add-opens java.base/java.util=ALL-UNNAMED', -- '--jvm-arg=--add-opens java.base/java.lang=ALL-UNNAMED', -- 💀 '-data', '/Users/nige/.config/jdtls_workspaces/' .. vim.fn.fnamemodify(vim.fn.getcwd(), ':p:h:t') -- -- 💀 -- 'java', -- or '/path/to/java17_or_newer/bin/java' -- -- depends on if `java` is in your $PATH env variable and if it points to the right version. -- '-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', '-Xms1g', -- '--add-modules=ALL-SYSTEM', '--add-opens', -- 'java.base/java.util=ALL-UNNAMED', '--add-opens', -- 'java.base/java.lang=ALL-UNNAMED', -- 💀 -- '-jar', -- '/Users/nige/.local/share/lsp/jdtls/plugins/org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar', -- -- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ -- -- Must point to the Change this to -- -- eclipse.jdt.ls installation the actual version -- -- -- 💀 -- '-configuration', '/Users/nige/.local/share/lsp/jdtls/config_mac', -- -- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ -- -- Must point to the Change to one of `linux`, `win` or `mac` -- -- eclipse.jdt.ls installation Depending on your system. -- -- -- 💀 -- '-data', '/Users/nige/.config/jdtls_workspaces/' .. -- vim.fn.fnamemodify(vim.fn.getcwd(), ':p:h:t') }, -- 💀 -- This is the default if not provided, you can remove it. Or adjust as needed. -- One dedicated LSP server & client will be started per unique root_dir root_dir = require('jdtls.setup').find_root({ '.git', 'mvnw', 'gradlew' }), -- 💀 -- This is the default if not provided, you can remove it. Or adjust as needed. -- One dedicated LSP server & client will be started per unique root_dir -- Here you can configure eclipse.jdt.ls specific settings -- See https://github.com/eclipse/eclipse.jdt.ls/wiki/Running-the-JAVA-LS-server-from-the-command-line#initialize-request -- for a list of options settings = { java = { eclipse = { downloadSources = true }, implementationsCodeLens = { enabled = true }, import = { enabled = true }, maven = { downloadSources = true }, references = { includeDecompiledSources = true }, referencesCodeLens = { enabled = true }, rename = { enabled = true }, signatureHelp = { enabled = true } } }, -- Language server `initializationOptions` -- You need to extend the `bundles` with paths to jar files -- if you want to use additional eclipse.jdt.ls plugins. -- -- See https://github.com/mfussenegger/nvim-jdtls#java-debug-installation -- -- If you don't plan on using the debugger or other eclipse.jdt.ls plugins you can remove this init_options = { extendedClientCapabilities = { classFileContentsSupport = true }, -- bundles = { -- vim.fn.glob( -- "/Users/nige/.local/share/nvim/dap-servers/com.microsoft.java.debug.plugin_0.43.0.jar", -- 1) -- } }, on_attach = function(client, bufnr) -- With `hotcodereplace = 'auto' the debug adapter will try to apply code changes -- you make during a debug session immediately. -- Remove the option if you do not want that. -- You can use the `JdtHotcodeReplace` command to trigger it manually -- require('jdtls').setup_dap({ hotcodereplace = 'auto' }) local jdtls = require('jdtls') jdtls.setup_dap({ hotcodereplace = 'auto' }) jdtls.setup.add_commands() end } -- This starts a new client & server, -- or attaches to an existing client & server depending on the `root_dir`. require('jdtls').start_or_attach(config)