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

时间:2019-01-27 22:27:00

标签: java maven intellij-idea assertj

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

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

AssertJ 3 requires Java 8。因此,我在POM中将1.7的这两行更改为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编辑器中报告错误:

  

无法解析符号“断言”

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

但是,仍然是我的编辑器Cannot resolve symbol 'Assertions'中的错误。

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

1 个答案:

答案 0 :(得分:1)

删除<scope>test</scope>

closed ticket # 520的AssertJ问题跟踪器中解决了该主题。

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

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

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

scope

…成为这个:

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