From 44570ee8a79c7de089b94bbb5db7f48b449a8a51 Mon Sep 17 00:00:00 2001 From: Oluwatobi Date: Tue, 24 Dec 2024 08:14:21 +0100 Subject: [PATCH] updated java env --- .../{java-config.lua => nvim-java-config.lua} | 0 java.lua | 176 ++++++++++++++++++ lazy-lock.json | 14 +- lua/plugins/{java.lua => nvim-java.lua} | 0 nvim-jdtls.lua | 6 + 5 files changed, 190 insertions(+), 6 deletions(-) rename after/plugin/{java-config.lua => nvim-java-config.lua} (100%) create mode 100644 java.lua rename lua/plugins/{java.lua => nvim-java.lua} (100%) create mode 100644 nvim-jdtls.lua diff --git a/after/plugin/java-config.lua b/after/plugin/nvim-java-config.lua similarity index 100% rename from after/plugin/java-config.lua rename to after/plugin/nvim-java-config.lua diff --git a/java.lua b/java.lua new file mode 100644 index 00000000..07517ee2 --- /dev/null +++ b/java.lua @@ -0,0 +1,176 @@ +-- Java Language Server configuration. +-- Locations: +-- 'nvim/ftplugin/java.lua'. +-- 'nvim/lang-servers/intellij-java-google-style.xml' + +-- local jdtls_ok, jdtls = pcall(require, 'jdtls') +-- if not jdtls_ok then +-- vim.notify 'JDTLS not found, install with `:LspInstall jdtls`' +-- return +-- end + +local home = os.getenv 'HOME' +local jdtls = require 'jdtls' +-- vim.notify 'Home: ' .. home + +-- See `:help vim.lsp.start_client` for an overview of the supported `config` options. +-- local jdtls_path = vim.fn.stdpath 'data' .. '/mason/packages/jdtls' +local jdtls_path = home .. '/.local/share/nvim/mason/packages/jdtls' +local path_to_lsp_server = jdtls_path .. '/config_mac' +local path_to_plugins = jdtls_path .. '/plugins/' +local path_to_jar = path_to_plugins .. 'org.eclipse.equinox.launcher_1.6.900.v20240613-2009.jar' +local lombok_path = jdtls_path .. '/lombok.jar' +local styling = home .. '/.local/share/java/eclipse-java-google-style.xml' +print(lombok_path) + +local root_markers = { '.git', 'mvnw', 'gradlew', 'pom.xml', 'build.gradle' } +local root_dir = require('jdtls.setup').find_root(root_markers) +if root_dir == '' then + return +end + +local project_name = vim.fn.fnamemodify(vim.fn.getcwd(), ':p:h:t') +local workspace_dir = vim.fn.stdpath 'data' .. '/site/java/workspace-root/' .. project_name +os.execute('mkdir ' .. workspace_dir) + +local java_21_home_dir = '/Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home' +local java_17_home_dir = '/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home' +local java_11_home_dir = '/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home' + +-- Main Config +local config = { + -- The command that starts the language server + -- See: https://github.com/eclipse/eclipse.jdt.ls#running-from-the-command-line + cmd = { + java_21_home_dir .. '/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', + '-Xmx1g', + '-Dlog.level=ALL', + '--add-modules=ALL-SYSTEM', + '--add-opens', + 'java.base/java.util=ALL-UNNAMED', + '--add-opens', + 'java.base/java.lang=ALL-UNNAMED', + '-javaagent:' .. lombok_path, + '-Xms1g', + '--add-modules=ALL-SYSTEM', + '--add-opens', + 'java.base/java.util=ALL-UNNAMED', + '--add-opens', + 'java.base/java.lang=ALL-UNNAMED', + + '-jar', + path_to_jar, + '-configuration', + path_to_lsp_server, + '-data', + workspace_dir, + }, + + -- 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 = root_dir, + + settings = { + java = { + home = java_21_home_dir, + eclipse = { + downloadSources = true, + }, + configuration = { + updateBuildConfiguration = 'interactive', + runtimes = { + { + name = 'JavaSE-21', + path = java_21_home_dir, + }, + { + name = 'JavaSE-11', + path = java_11_home_dir, + }, + { + name = 'JavaSE-17', + path = java_17_home_dir, + }, + }, + }, + maven = { + downloadSources = true, + }, + implementationsCodeLens = { + enabled = true, + }, + referencesCodeLens = { + enabled = true, + }, + references = { + includeDecompiledSources = true, + }, + format = { + settings = { + url = styling, + profile = 'GoogleStyle', + }, + }, + }, + signatureHelp = { enabled = true }, + 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.*', + }, + importOrder = { + 'java', + 'com', + 'org', + 'javax', + 'jarkata', + }, + }, + sources = { + organizeImports = { + starThreshold = 9999, + staticStarThreshold = 9999, + }, + }, + codeGeneration = { + toString = { + template = '${object.className}{${member.name()}=${member.value}, ${otherMembers}}', + }, + useBlocks = true, + }, + }, + + flags = { + allow_incremental_sync = true, + }, + init_options = { + bundles = { + vim.fn.glob(lombok_path, 1), + }, + }, +} + +-- config['on_attach'] = function(_, bufnr) +-- require('keymaps').map_java_keys(bufnr) +-- require('lsp_signature').on_attach({ +-- bind = true, -- This is mandatory, otherwise border config won't get registered. +-- floating_window_above_cur_line = false, +-- padding = '', +-- handler_opts = { +-- border = 'rounded', +-- }, +-- }, bufnr) +-- 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) diff --git a/lazy-lock.json b/lazy-lock.json index cdca24fa..4a24e2ed 100644 --- a/lazy-lock.json +++ b/lazy-lock.json @@ -7,10 +7,10 @@ "cmp-nvim-lua": { "branch": "main", "commit": "f12408bdb54c39c23e67cab726264c10db33ada8" }, "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, - "conform.nvim": { "branch": "master", "commit": "62055b40c4d0b001c87559c7adf96a4a464bcdd5" }, + "conform.nvim": { "branch": "master", "commit": "339b3e4519ec49312d34fcfa275aa15bfaa67025" }, "friendly-snippets": { "branch": "main", "commit": "efff286dd74c22f731cdec26a70b46e5b203c619" }, "gitsigns.nvim": { "branch": "main", "commit": "5f808b5e4fef30bd8aca1b803b4e555da07fc412" }, - "gopher.nvim": { "branch": "main", "commit": "f55c15ada8e02398000c04a96ef44d986cd01051" }, + "gopher.nvim": { "branch": "main", "commit": "0ed14a40d9799ac8d92aaf9eb1cd9be22ffd6b14" }, "hererocks": { "branch": "master", "commit": "c9c5444dea1e07e005484014a8231aa667be30b6" }, "image.nvim": { "branch": "master", "commit": "b3e1af829a56bb038e5f81bf97798a2950064b62" }, "lazy.nvim": { "branch": "main", "commit": "7e6c863bc7563efbdd757a310d17ebc95166cef3" }, @@ -29,19 +29,21 @@ "nvim-autopairs": { "branch": "master", "commit": "b464658e9b880f463b9f7e6ccddd93fb0013f559" }, "nvim-cmp": { "branch": "main", "commit": "b555203ce4bd7ff6192e759af3362f9d217e8c89" }, "nvim-dap": { "branch": "master", "commit": "a6070b4e9e9a8ff1bc513c3748eff27080b0f44a" }, - "nvim-java": { "branch": "main", "commit": "a36f50c82f922f352d4ce7ac6a3c6b238b3e0a36" }, + "nvim-java": { "branch": "main", "commit": "e8e84413ca03e7d0541921e795b2e6bf8801f186" }, "nvim-java-core": { "branch": "main", "commit": "5b03dca22fee76524a89e1c2dc1d73a9f0b1a3bb" }, "nvim-java-dap": { "branch": "main", "commit": "55f239532f7a3789d21ea68d1e795abc77484974" }, "nvim-java-refactor": { "branch": "main", "commit": "ea1420fed5463c9cc976c2b4175f434b3646f0f7" }, "nvim-java-test": { "branch": "main", "commit": "7f0f40e9c5b7eab5096d8bec6ac04251c6e81468" }, - "nvim-lspconfig": { "branch": "master", "commit": "040001d85e9190a904d0e35ef5774633e14d8475" }, - "nvim-treesitter": { "branch": "master", "commit": "2a75d8065cff33216e106b651eb0f58b90375717" }, + "nvim-lspconfig": { "branch": "master", "commit": "c580f34bc5fdca8aaf737a9ab8a5d775cb940e57" }, + "nvim-treesitter": { "branch": "master", "commit": "50947387c20ec3fb8c30b8c1c1a1c39f68deb970" }, "nvim-treesitter-context": { "branch": "master", "commit": "2bcf700b59bc92850ca83a1c02e86ba832e0fae0" }, "nvim-treesitter-textobjects": { "branch": "master", "commit": "ad8f0a472148c3e0ae9851e26a722ee4e29b1595" }, "nvim-ts-autotag": { "branch": "main", "commit": "1cca23c9da708047922d3895a71032bc0449c52d" }, - "nvim-web-devicons": { "branch": "master", "commit": "0eb18da56e2ba6ba24de7130a12bcc4e31ad11cb" }, + "nvim-ufo": { "branch": "main", "commit": "270ca542dae992ffe40274718c63645217ebc8bf" }, + "nvim-web-devicons": { "branch": "master", "commit": "15c7d0f616ebf88960ce5c4221828f62789d36d9" }, "nvim-window-picker": { "branch": "main", "commit": "41cfaa428577c53552200a404ae9b3a0b5719706" }, "plenary.nvim": { "branch": "master", "commit": "2d9b06177a975543726ce5c73fca176cedbffe9d" }, + "promise-async": { "branch": "main", "commit": "119e8961014c9bfaf1487bf3c2a393d254f337e2" }, "spring-boot.nvim": { "branch": "main", "commit": "218c0c26c14d99feca778e4d13f5ec3e8b1b60f0" }, "tailwind-tools.nvim": { "branch": "master", "commit": "3703e162d819a04b128902c508276553dae0dfb8" }, "telescope-fzf-native.nvim": { "branch": "main", "commit": "dae2eac9d91464448b584c7949a31df8faefec56" }, diff --git a/lua/plugins/java.lua b/lua/plugins/nvim-java.lua similarity index 100% rename from lua/plugins/java.lua rename to lua/plugins/nvim-java.lua diff --git a/nvim-jdtls.lua b/nvim-jdtls.lua new file mode 100644 index 00000000..00044ebd --- /dev/null +++ b/nvim-jdtls.lua @@ -0,0 +1,6 @@ +return { + 'mfussenegger/nvim-jdtls', + dependencies = { + 'nvim-lua/plenary.nvim', + }, +}