From 4f0c0471cd2fc6309d81507ebb1695c714e4f9f0 Mon Sep 17 00:00:00 2001 From: HuNtErJ1324 Date: Sun, 21 Jun 2026 15:17:23 -0700 Subject: [PATCH] Finish wiring up nvim-java (jdtls bootstrap) nvim-java was installed but never initialized, so jdtls ran vanilla and the plugin's value-add (tests, DAP, refactors, Spring Boot) was inert. Wire it up following the current nvim-java README (Neovim 0.11.5+ / vim.pack install): - lua/custom/plugins/nvim-java.lua now installs the full stack (spring-boot.nvim pinned, nui.nvim, nvim-dap, nvim-java), calls `require('java').setup()` and then `vim.lsp.enable('jdtls')`, in that required order. - init.lua: the LSP config/enable loop now SKIPS jdtls, so nvim-java is the single owner of jdtls configuration and enablement. This avoids a second, competing vanilla jdtls setup while jdtls stays in the `servers` table purely so mason-tool-installer keeps it installed. - java-debug-adapter + java-test remain provided via mason-nvim-dap (debug.lua), giving nvim-java the bundles it launches jdtls with for DAP and tests. Verified headless: opening a .java buffer attaches exactly one jdtls client (plus spring-boot), with no duplicate/competing jdtls setup and no Lua errors. Co-Authored-By: Claude Opus 4.8 --- init.lua | 15 ++++++++++++--- lua/custom/plugins/nvim-java.lua | 32 +++++++++++++++++++++++++++----- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/init.lua b/init.lua index 9c996d2c..76ca95d5 100644 --- a/init.lua +++ b/init.lua @@ -706,7 +706,11 @@ do stylua = {}, -- Used to format Lua code - -- Java language server (installed via Mason). + -- Java: jdtls is installed via Mason (it's a key here so mason-tool-installer + -- picks it up), but its LSP config and `vim.lsp.enable` are owned by nvim-java + -- (see lua/custom/plugins/nvim-java.lua). We therefore SKIP jdtls in the + -- config/enable loop below so nvim-java's jdtls bootstrap is the one that wins + -- and there is no competing vanilla jdtls setup. jdtls = {}, -- ty: Astral's Python type checker. Not yet shipped by nvim-lspconfig, so we @@ -797,8 +801,13 @@ do require('mason-tool-installer').setup { ensure_installed = ensure_installed } for name, server in pairs(servers) do - vim.lsp.config(name, server) - vim.lsp.enable(name) + -- jdtls is configured and enabled by nvim-java (lua/custom/plugins/nvim-java.lua), + -- which must run `require('java').setup()` before `vim.lsp.enable('jdtls')`. + -- Skip it here to avoid a second, competing jdtls setup. + if name ~= 'jdtls' then + vim.lsp.config(name, server) + vim.lsp.enable(name) + end end end diff --git a/lua/custom/plugins/nvim-java.lua b/lua/custom/plugins/nvim-java.lua index c77d807e..452a1a39 100644 --- a/lua/custom/plugins/nvim-java.lua +++ b/lua/custom/plugins/nvim-java.lua @@ -1,7 +1,29 @@ --- nvim-java: Java IDE layer on top of jdtls. +-- nvim-java: full Java IDE layer on top of jdtls (tests, DAP, refactors, Spring Boot). -- https://github.com/nvim-java/nvim-java -- --- NOTE: This only installs the plugin (mirroring the user's original --- `return { 'nvim-java/nvim-java' }` spec). It is NOT yet initialized, so jdtls --- currently runs vanilla. Wiring (`require('java').setup()`) is finished later. -vim.pack.add { 'https://github.com/nvim-java/nvim-java' } +-- This file is loaded by the custom-plugins loader (lua/custom/plugins/init.lua), +-- which runs in Section 10 of init.lua -- AFTER the LSP section (Section 6). The LSP +-- section deliberately SKIPS jdtls in its `vim.lsp.config`/`vim.lsp.enable` loop, so +-- this is the single place jdtls is configured and enabled. That guarantees the +-- required order (`require('java').setup()` before `vim.lsp.enable('jdtls')`) and +-- avoids a second, competing vanilla jdtls setup. +-- +-- Requirements (nvim-java README, vim.pack install): Neovim 0.11.5+. jdtls, +-- java-debug-adapter and java-test are provided via Mason -- jdtls from the LSP +-- section's mason-tool-installer, java-debug-adapter + java-test from +-- lua/kickstart/plugins/debug.lua (mason-nvim-dap). nvim-dap and nui.nvim are also +-- pulled in by debug.lua / neo-tree.lua respectively; re-listing them here is +-- idempotent and keeps this spec self-contained per the README. +vim.pack.add { + { src = 'https://github.com/JavaHello/spring-boot.nvim', version = '218c0c26c14d99feca778e4d13f5ec3e8b1b60f0' }, + 'https://github.com/MunifTanjim/nui.nvim', + 'https://github.com/mfussenegger/nvim-dap', + 'https://github.com/nvim-java/nvim-java', +} + +-- Must run BEFORE jdtls is enabled: it patches the jdtls config so the language +-- server is launched with the java-test / java-debug-adapter bundles. +require('java').setup() + +-- Enable jdtls using the config nvim-java just registered (the new Neovim 0.11+ API). +vim.lsp.enable 'jdtls'