无法解析符号 'Assertions' <-- 尝试在 IntelliJ 中使用 AssertJ 时出现错误消息

Cannot resolve symbol 'Assertions' <-- Error message when trying to use AssertJ in IntelliJ

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

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

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

    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>

我将其添加到 POM 中:

    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>3.11.1</version>
        <scope>test</scope>
    </dependency>

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

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

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

import static org.assertj.core.api.Assertions.* ; 

IDE 编辑器报告错误:

Cannot resolve symbol 'Assertions'

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

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

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

删除<scope>test</scope>

此主题已在 AssertJ 问题跟踪器的 closed ticket # 520 中得到解决。

当 Maven 依赖项带有值为 testscope 元素时,这意味着您不能在测试特定源 package/folder 之外使用该库。

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

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

    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>3.11.1</version>
        <scope>test</scope>
    </dependency>

…变成这样:

    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>3.11.1</version>
    </dependency>