必须指定正确的插件来初始化 JDK 中的 (Eclipse) 语言服务器。我们可以通过创建一个由您的 nvim LSP 插件/配置调用的 shell 脚本来做到这一点。
首先,您必须找到位于 eclipse/jdt-language-server/plugin 文件夹中的 equinox_launcher jar 文件并将其添加到您的脚本中。
Linux shell 脚本应如下所示:
#!/usr/bin/env/ bash
JAR="path/to/your/eclipse/build/plugins/org.eclipse.equinox.launcher_longnumberhere.jar"
GRADLE_HOME=$HOME/where_gradle_lives/gradle $JAVA_HOME/or_absolute_path \/bin/java \
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044 \
-Declipse.application=org.eclipse.jdt.ls.core.id1 \
-Dosgi.bundles.defaultStartLevel=4 \
-Declipse.product=org.eclipse.jdt.ls.core.product \
-Dlog.level=ALL -noverify \
-Xmx1G -jar echo $(JAR) \ // points to the plugin
-configuration ./config_linux \ // points to the config folder within jdtls
-data /path/to/data \
--add-modules=ALL-SYSTEM \
--add-opens java.base/java.util=ALL-UNNAMED \
--add-opens java.base/java.lang=ALL-UNNAMED
Win 批处理脚本应如下所示:
SET "JAR=path\to\your\eclipse\build\plugins\org.eclipse.equinox.launcher_longnumberhere.jar"
SET "GRADLE_HOME=path\where\gradle\lives\gradle %JAVA_HOME%\or_absolute_path\bin\java"^
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044^
-Declipse.application=org.eclipse.jdt.ls.core.id1^
-Dosgi.bundles.defaultStartLevel=4^
-Declipse.product=org.eclipse.jdt.ls.core.product^
-Dlog.level=ALL^
-noverify^
-Xmx1G -jar echo %JAR%^ // this points to the plugin
-configuration .\config_win^ // points to the config folder within jdtls
-data \path\to\data^
--add-modules=ALL-SYSTEM^
--add-opens java.base/java.util=ALL-UNNAMED^
--add-opens java.base/java.lang=ALL-UNNAMED
在 agentlib 行之后,您可以添加您需要的模块。为了更方便,java_lsp.sh 或 java_lsp.bat 可以包含在环境路径中。
如果您从源代码构建,或者(推荐)使用 Milestone 构建,jdtls 目标目录可能会有所不同。
https://download.eclipse.org/jdtls/milestones/
有关更多详细信息,您可以查看:
Neovim 内置 LSP 文档:
关于 JDTLS 的指南 + 文档:
关于用 lua 编写的 nvim 的 JDTLS 客户端插件的指南 + 示例: