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

时间:2020-05-28 22:16:01

标签: java maven visual-studio-code junit importerror

我正在使用Maven在Visual Studio代码中开发Java项目,并且目前正在尝试编写测试类。 我已经将junit作为依赖项添加到我的pom.xml文件中:

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

当前,我的类如下所示:( Board类没有问题,并且getOne()返回1)

import org.junit.Test;

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

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

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

  1. “导入的org.junit无法解析”

  2. “测试无法解析为类型”

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

运行mvn test会产生预期的结果(测试通过),并且在mvn package之后,从命令行运行项目的.jar文件可以毫无问题地运行该项目。每当我尝试从vscode运行项目时,即使当前不存在错误消息(即,在打开测试类之后但在保存之前),它都会通知我构建失败。如果我仍然告诉vscode继续进行,则该项目将再次正常运行。尝试从vscode运行测试的工作方式相同(我收到一条错误消息,但是在我告诉vscode继续进行后,测试通过正常。)

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

JDK:openjdk v11.0.7

vscode:v1.45.1

maven:Apache Maven v3.6.3

2 个答案:

答案 0 :(得分:3)

试试这个 VS Code 命令...

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

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

附注:

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

答案 1 :(得分:0)

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