-
Notifications
You must be signed in to change notification settings - Fork 214
Eclipse JDT Language Server
-
下载Eclipse JDT LS。例如:我下载的目录是
/home/archer/.cache/jdt-language-server-latest
-
将
jdtls
命令加入环境变量,jdtls
命令位于下载的Eclipse JDT LS目录的bin
目录下。例如: 我的是在/home/archer/.cache/jdt-language-server-latest/bin
。 -
运行
jdtls -h
,确保jdtls
命令在全局可找到。
jdtls -h
usage: jdtls [-h] [--validate-java-version | --no-validate-java-version] [--jvm-arg JVM_ARG]
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
(require 'lsp-bridge-jdtls) ;; 根据项目自动生成自定义配置,添加必要的启动参数
(setq lsp-bridge-enable-auto-import t) ;; 开启自动导入依赖,目前没有code action。补全时可以通过这个导入相应的依赖,建议开启。
将lombok的路径加入到lsp-bridge-jdtls-jvm-args
参数中,在生成配置时会加入到command参数中。
例如:
(setq lsp-bridge-jdtls-jvm-args '("-javaagent:/home/archer/.m2/repository/org/projectlombok/lombok/1.18.22/lombok-1.18.22.jar"))
注意:如果项目配置已经生成,那么新加入的lsp-bridge-jdtls-jvm-args
参数将不会生效,需要删除旧的配置或手动加入已经生成的配置文件中。
默认配置文件位置是: ~/.cache/lsp-bridge-jdtls/${porject-name}-${project-path-hash}/jdtls.json
修改或删除即可。
通过lsp-bridge-get-workspace-folder
可以支持在一个workspace目录下的多个项目。以下是一个例子。issue 323有更多的细节。
(defun my-lsp-bridge-workspace (proj)
(let* ((proj-2-workspace
'(("/home/user/projects/workspace1/proj1" .
"file:///home/user/projects/workspace1/")
("/home/user/projects/workspace2/proj2" .
"file:///home/user/projects/workspace2/")))
(kv (assoc proj proj-2-workspace)))
(when kv
(cdr kv))))
(custom-set-variables '(lsp-bridge-get-workspace-folder 'my-lsp-bridge-workspace))
因为jdtls要求每个项目需要指定一个唯一的数据目录,也就是启动命令中的-data
参数。
但是默认的langserver/jdtls.json是不支持根据项目指定-data
参数,所以lsp-bridge-jdtls.el主要的作用是动态的指定一些用户相关的配置,让jdtls能拿到正确的启动参数。
当你(require 'lsp-bridge-jdtls)
后,他会在java-mode-hook
中添加lsp-bridge-get-lang-server-by-project
的实现来自定义语言服务器配置。
(add-hook 'java-mode-hook (lambda ()
(setq-local lsp-bridge-get-lang-server-by-project 'lsp-bridge-get-jdtls-server-by-project)))
注意:如果使用use-package
来按需加载包,(require 'lsp-bridge-jdtls)
需要写在:init
部分 确保正确执行hook