无法解析符号“断言”<-- 尝试在 IntelliJ 中使用 AssertJ 时的错误消息

Bas*_*que 2 java intellij-idea maven assertj

与其他一些问题类似,我发现 IntelliJ 神秘地拒绝识别 AssertJ 库。我再次询问,因为(a)我尝试了各种建议,并且(b)我有一个非常简单的例子,任何人都可以尝试自己。

在 IntelliJ 2018 和 IntelliJ 2019 预发布版中,我使用 Maven 原型maven-archetype-quickstart版本 1.4创建了一个新项目。

AssertJ 3 需要 Java 8。所以我将 POM 中的这两行更改为1.7to 11

    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
Run Code Online (Sandbox Code Playgroud)

我将其添加到 POM 中:

    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>3.11.1</version>
        <scope>test</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

使用IntelliJ 中的Maven面板,我执行了一个cleaninstall.

看起来不错。我验证org.assertj:assertj-core:3.11.1库出现在IntelliJ的项目面板中。应用程序运行,Hello World出现在 IntelliJ 的控制台上。

App.java文件中,我添加了这个import语句。

import static org.assertj.core.api.Assertions.* ; 
Run Code Online (Sandbox Code Playgroud)

IDE 编辑器中报告的错误:

无法解析符号“断言”

有些人建议损坏的 Maven 缓存。所以我退出了 IntelliJ,并删除了.m2我的主文件夹中的文件夹。我在 IntelliJ 中重新打开我的项目,并重新执行 Maven clean& install. 许多东西都在下载,所以我知道 Maven 缓存确实正在重新创建。

然而,我的编辑器中仍然存在错误,Cannot resolve symbol 'Assertions'.

不涉及 Java 模块,因为quickstart原型尚未为此更新。

Bas*_*que 8

删除 <scope>test</scope>

该主题已在AssertJ 问题跟踪器上的已关闭故障单 # 520中得到解决。

当 Maven 依赖项带有scope值为 的元素时test,这意味着您不能在特定于测试的源包/文件夹之外使用该库。

如果您尝试从示例项目的src/main/java/…文件夹层次结构中的代码调用 AssertJ ,您将看到该错误。如果您从 调用 AssertJ src/test/java…,您将看到成功。

要在src/main/java/…文件夹层次结构中启用 AssertJ ,请删除scopePOM 依赖项中的元素。所以这:

    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>3.11.1</version>
        <scope>test</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

……变成这样:

    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>3.11.1</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)