I've been getting into Neovim more and I quite like it so far. I need to use java for university in a couple months so I've been setting that up. I've gotten java to run pretty good, but I'm running into issues setting up the debugger.
My config is based off kickstart.nvim, I cloned it a couple weeks ago and decided to go off on my own from there.
I tried to follow a guide to setup the java debugger after a bit of trouble shooting I managed to download java-debug
and vscode-java-test
using mason (which was 10x easier than the way they did it, I had a lot of issues). Afterwards the guide said to put the following code in a file, which to my knowledge attaches jdtls to the buffer.
...
local HOME = os.getenv "HOME"
-- Debugger installation location
local DEBUGGER_LOCATION = HOME .. "/.local/share/nvim"
-- Debugging
local bundles = {
vim.fn.glob(
DEBUGGER_LOCATION .. "/java-debug/com.microsoft.java.debug.plugin/target/com.microsoft.java.debug.plugin-*.jar"
),
}
vim.list_extend(bundles, vim.split(vim.fn.glob(DEBUGGER_LOCATION .. "/vscode-java-test/server/*.jar"), "\n"))
local config = {
...
on_attach = require("config.lsp").on_attach,
-- If you don't plan on using the debugger or other eclipse.jdt.ls plugins you can remove this
init_options = {
bundles = bundles,
},
}
...
I tried to change that code and put it in my own config, with a notable change being that I changed the path vim.fn.glob()
gets because it didn't line up with the files I had, the result of that is the following (from line 500 in init.lua
in my config if anyone wants to see that)
local HOME = os.getenv "HOME"
local DEBUGGER_LOCATION = HOME .. "/.local/share/nvim/mason/packages"
local jdtlsBundles = {
vim.fn.glob(
DEBUGGER_LOCATION .. "/java-debug-adapter/extension/server/com.microsoft.java.debug.plugin-*.jar"
),
}
vim.list_extend(jdtlsBundles, vim.split(vim.fn.glob(DEBUGGER_LOCATION .. "/java-test/extension/server/*.jar"), "\n"))
local serverSettings = {
-- clangd = {},
-- gopls = {},
pyright = {},
-- rust_analyzer = {},
-- tsserver = {},
jdtls = {
init_options = {
bundles = jdtlsBundles
}
},
lua_ls = {
Lua = {
workspace = { checkThirdParty = false },
telemetry = { enable = false },
},
},
}
-- Setup neovim lua configuration
require('neodev').setup()
-- nvim-cmp supports additional completion capabilities, so broadcast that to servers
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
-- Ensure the servers above are installed
local mason_lspconfig = require 'mason-lspconfig'
mason_lspconfig.setup {
ensure_installed = vim.tbl_keys(serverSettings),
}
mason_lspconfig.setup_handlers {
function(server_name)
require('lspconfig')[server_name].setup {
capabilities = capabilities,
on_attach = on_attach,
settings = serverSettings[server_name],
}
end,
}
Then finally the guide says to copy the following code in a file /lsp/init.lua
so I assume that's to setup the lsp.
function M.on_attach(client, bufnr)
...
-- Configure for jdtls
if client.name == "jdt.ls" then
require("jdtls").setup_dap { hotcodereplace = "auto" }
require("jdtls.dap").setup_dap_main_class_configs()
vim.lsp.codelens.refresh()
end
end
From my understanding the last function in the previous code block does that, so in the on_attach
function that it calls I copied this code directly. (line 480 in init.lua
in my config).
Kickstart.nvim itself already has some setup done for nvim-dap, copying it all here seems overboard but this seems like the relevant part:
require('mason-nvim-dap').setup {
automatic_setup = true,
handlers = {},
ensure_installed = {
'delve',
'java-debug',
'vscode-java-test',
},
}
as far as I remember I never changed this, but 'java-debug'
and 'vs-code-java-test'
aren't in base kickstart.nvim so I may have added those and forgotten.
From this point, the guide suggests things should be working, which they half are. When I'm in a java project, pressing F7 does give me a few windows that seems to be debug related (albeit that they're empty) however if I try to continue
/run the debugger I get the error no configuration found for `java`. You need to add configs to `dap.configurations.java` (see `:h dap-configuration`)
The guide suggests to run the command :JdtRefreshDebugConfigs
, but that command doesn't exist for me.
And there I'm stuck right now, I've looked around a little for ways to solve my problem, but frankly I don't even know where to look, so I just decided to make a post here (this is a cross-post from a post on Neovim discourse https://neovim.discourse.group/t/cant-seem-to-figure-out-how-to-set-up-the-java-debug-adapter/4216). If anyone knows how to point me into the right direction, or knows what I'm doing wrong, any help is much appreciated! (please keep in mind that I'm pretty close to a complete beginner, so this could be a simple mistake I made)