0

我已经在我的${CLASSPATH}环境变量中添加了 junit jar 文件,但是当我将 lsp 用于 neovim 时,它无法识别函数并从 JAR 文件导入。

import static org.junit.Assert.assertEquals;     ■ The import org.junit cannot be resolved
  1 import static org.junit.Assert.assertTrue;     ■ The import org.junit cannot be resolved
  2 import static org.junit.Assert.fail;     ■ The import org.junit cannot be resolved
  3
  4 import java.util.Comparator;
  5 import java.util.Arrays;
  6 import java.util.List;
  7 import java.util.ArrayList;
  8
  9 import org.junit.Test;     ■ The import org.junit cannot be resolved
 10 import org.junit.Before;     ■ The import org.junit cannot be resolved

有谁知道如何将其添加${CLASSPATH}到 jdtls 识别的导入和“东西”中?

4

2 回答 2

0

必须指定正确的插件来初始化 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 客户端插件的指南 + 示例:

于 2021-05-03T00:00:40.773 回答
0

我最近经历了试图让它工作的过程(注意我使用jdtls-launcher来运行 JDTLS,不确定这是否会影响我的答案是否有效),并且基本上发现你需要在.classpath文件中添加一行在您启动新项目时 JDTLS 自动创建的工作区目录中(对我来说位于~/.cache/jdtls-workspace/my_project_name_with_numbers_after)。根据本文档的第 3.4 节,该行应如下所示:

<classpathentry kind="lib" path="/path/to/junit-platform-console-standalone-1.8.2.jar"/>

/path/to/junit-platform-console-standalone-1.8.2.jar您可能junit-platform-console-standalone-1.8.2.jar这里下载的任何地方(或您想要的任何 JUnit 版本)在哪里。

但是,我在此 GitHub 问题中更详细地解释了我为使其工作所做的工作,因此我建议您查看以获取更多信息。

于 2022-02-26T18:04:37.267 回答