Не удается разрешить символ «Утверждения» ‹ Сообщение об ошибке при попытке использовать AssertJ в IntelliJ

Как и в случае с некоторыми другими вопросами, я обнаружил, что IntelliJ таинственным образом отказывается распознавать библиотеку AssertJ. Я спрашиваю еще раз, поскольку (а) я пробовал различные предложения, и (б) у меня есть очень простой пример, который каждый может попробовать сам.

В предварительной версии IntelliJ 2018 и IntelliJ 2019 я создаю новый проект, используя архетип Maven maven-archetype-quickstart версия 1.4.

Для AssertJ 3 требуется 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>

Используя панель Maven в IntelliJ, я выполнил clean и install.

Выглядит неплохо. Я проверяю, что библиотека org.assertj:assertj-core:3.11.1 отображается на панели Project в IntelliJ. Приложение запускается, а Hello World появляется на консоли в IntelliJ.

В файл App.java я добавляю этот оператор import.

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

Сообщение об ошибке в редакторе IDE:

Не удается разрешить символ «Утверждения»

Некоторые люди предполагают поврежденный кеш Maven. Поэтому я ухожу из IntelliJ и удаляю папку .m2 в своей домашней папке. Я снова открываю свой проект в IntelliJ и повторно запускаю Maven clean и install. Многие вещи загружаются, поэтому я знаю, что кеш Maven действительно воссоздается.

Тем не менее, все еще ошибка в моем редакторе, Cannot resolve symbol 'Assertions'.

Модули Java не задействованы, так как архетип quickstart еще не был обновлен для этого.


person Basil Bourque    schedule 27.01.2019    source источник
comment
Если у вас модульный проект, не забудьте добавить requires org.assertj.core; в файл module-info.   -  person Jorn Vernee    schedule 28.01.2019
comment
@JornVernee Спасибо, но нет модулей Java. Архетип Maven quickstart для модулей еще не обновлен. Я уточнил в Вопросе. Сразу после публикации я нашел решение: область test в зависимости ограничивает доступ только к тестовым классам. Удаление этой области test открывает AssertJ для использования в вашем основном приложении.   -  person Basil Bourque    schedule 28.01.2019


Ответы (1)


Удалить <scope>test</scope>

Эта тема рассмотрена в закрытом тикете № 520 в системе отслеживания ошибок AssertJ. .

Когда зависимость Maven содержит элемент scope со значением test, это означает, что вы не можете использовать эту библиотеку вне исходного пакета/папки, специфичной для теста.

Если вы попытаетесь вызвать AssertJ из кода в иерархии папок src/main/java/… вашего примера проекта, вы увидите эту ошибку. Если вы вызовете AssertJ из src/test/java…, вы увидите успех.

Чтобы включить AssertJ в иерархии папок src/main/java/…, удалите элемент scope в вашей зависимости POM. Итак, это:

    <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>
person Basil Bourque    schedule 27.01.2019
comment
Ты гений! Спасибо. - person Lyle Z; 21.12.2020