15
15
16
16
local M = {}
17
17
18
+
19
+ local function search_jdk_runtimes ()
20
+ local runtimes = {}
21
+ local sdkman_java_candidates = ' ~/.sdkman/candidates/java/'
22
+ local jdk_versions = { ' 8' , ' 11' , ' 17' , ' 21' , ' 22' , ' 18' }
23
+ for _ , version in ipairs (jdk_versions ) do
24
+ local path = vim .fn .glob (sdkman_java_candidates .. version .. ' .*' , true , true )
25
+ if # path > 0 then
26
+ table.insert (runtimes , { name = ' JDK' .. version , path = path [1 ] })
27
+ end
28
+ end
29
+
30
+ local system_default = vim .fn .system ({ ' java-config' , ' -O' })
31
+ if vim .v .shell_error == 0 then
32
+ table.insert (runtimes , { name = ' System Default' , path = string.gsub (system_default , " %s+$" , ' ' ) })
33
+ end
34
+
35
+ return runtimes
36
+ end
37
+
18
38
function M .jdtls ()
19
39
local mason_registery = require (' mason-registry' )
20
40
local server = mason_registery .get_package (' jdtls' )
@@ -34,7 +54,16 @@ function M.jdtls()
34
54
local extendedClientCapabilities = jdtls .extendedClientCapabilities
35
55
extendedClientCapabilities .resolveAdditionalTextEditsSupport = true
36
56
37
- -- TODO: check java version, jdtls requires JAVA >= 17
57
+ -- Finding supported Java in sdkman
58
+ -- or u can search in more locations
59
+ local javas = vim .fn .glob (' ~/.sdkman/candidates/java/{21,20,17,22,18,19}*' , true , true )
60
+ local java_home
61
+ if # javas > 0 then
62
+ java_home = javas [1 ]
63
+ else
64
+ java_home = os.getenv (' JAVA_HOME' )
65
+ end
66
+ -- TODO: build a JDK table dynamically to 'settings.java.configuration' ?
38
67
39
68
local cfg_file
40
69
if vim .fn .has (' mac' ) == 1 then
@@ -54,7 +83,13 @@ function M.jdtls()
54
83
local workspace_dir = data_path .. ' /jdtls-ws/' .. prj_name
55
84
56
85
local config = vim .tbl_deep_extend (' force' , {
57
- cmd = { config_path .. ' /bin/java-lsp' , dir , dir .. ' /' .. cfg_file , workspace_dir },
86
+ cmd = {
87
+ config_path .. ' /bin/java-lsp' ,
88
+ ' -r' , dir ,
89
+ ' -c' , dir .. ' /' .. cfg_file ,
90
+ ' -d' , workspace_dir ,
91
+ ' -j' , java_home ,
92
+ },
58
93
settings = {
59
94
-- https://github.com/mfussenegger/dotfiles/blob/master/vim/.config/nvim/ftplugin/java.lua
60
95
java = {
@@ -103,8 +138,9 @@ function M.jdtls()
103
138
},
104
139
useBlocks = true ,
105
140
},
106
- -- runtimes = {
107
- -- },
141
+ configuration = {
142
+ runtimes = search_jdk_runtimes (),
143
+ }
108
144
},
109
145
},
110
146
flags = {
0 commit comments