无法解析符号 '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 面板,我执行了 clean
和 install
。
看起来不错。我验证 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 依赖项带有值为 test
的 scope
元素时,这意味着您不能在测试特定源 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>
与其他一些问题类似,我发现 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 面板,我执行了 clean
和 install
。
看起来不错。我验证 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 依赖项带有值为 test
的 scope
元素时,这意味着您不能在测试特定源 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>