为什么 vscode 无法识别导入 org.junit?

Why does vscode not recognize the import org.junit?

我正在使用 Maven 在 visual studio 代码中开发一个 java 项目,目前正在尝试编写一个测试 class。 我已将 junit 添加为我的 pom.xml 文件的依赖项:

<dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
</dependency>

目前,我的 class 看起来像这样:(Board class 和 getOne() returns 没有问题 1)

import org.junit.Test;

public class BoardTest {
    private Board board = new Board();

    @Test
    public void testOne() {
        assert(board.getOne() == 1);
    }
}

最初,当我打开文件时,一切正常,但是一旦我保存,vscode 会生成 2 条错误消息,当我关闭并重新打开文件时,这两条消息都会消失,但会再次出现保存后:

  1. "The import org.junit cannot be resolved"

  2. "Test cannot be resolved to a type"

有趣的是,即使存在这些错误,vscode 也为我提供了导入和@Test 标志的鼠标悬停信息,就好像它实际上已经正确解决了它们一样。 我有来自命令行的 运行 mvn install,vscode 甚至在项目的 java 依赖项部分列出了 junit-4.12.jar。

运行 mvn test 产生了预期的结果(测试通过),并且在 mvn package、运行 从命令行 [=]ning 项目的 .jar 文件之后66=]s 项目没有问题。每当我尝试 运行 来自 vscode 的项目时,它都会通知我构建失败,即使当前不存在错误消息(即在我打开测试后 class 但在我保存之前)。如果我告诉 vscode 继续进行,项目再次 运行 没问题。尝试 运行 来自 vscode 的测试以相同的方式工作(我收到一条错误消息,但在我告诉 vscode 继续进行之后测试正常通过)。

关于什么可能导致这种情况的任何想法?以下是我正在使用的所有内容的当前版本:

JDK: openjdk v11.0.7

vscode: v1.45.1

maven:Apache Maven v3.6.3

试试这个 VS Code 命令...

View -> Command Palette -> Java: Clean Java Language Server Workspace

此命令解决了我在 VS Code 中无法识别 Gradle 项目的 .java 文件中的类似问题,即使 Gradle 会构建并且 运行成功。此 VS Code 命令类似于 IntelliJ 的 File -> Invalidate Caches and Restart,因为它会强制刷新 IDE 的可用令牌和标识符缓存。

旁注:

  • 确保至少有一次 运行 你的构建工具(例如 gradle buildmvn install),以便将所需的包下载到本地计算机,以便 VS Code 可以找到他们。
  • 此命令附带来自 Red Hat (redhat.java) 的 VS Code 扩展“Java 的语言支持”,它捆绑在 Microsoft 的“Java 扩展包”中 ( vscjava.vscode-java-包)。您必须安装这些扩展程序之一才能使用它。

vscode设置中设置maven用户settings.xml路径,运行上面的命令View -> Command Palette -> Java: Clean Java Language Server Workspace 并重新启动 vscode 帮助我解决了这个问题。