Подтвердить что ты не робот

Как отключить проверку pom.xml в IntelliJ IDEA

Я использую buildnumber-maven-plugin, чтобы получить Mercurial changeet в качестве номера сборки проекта:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>buildnumber-maven-plugin</artifactId>
    <version>1.2</version>
    <executions>
        <execution>
            <phase>initialize</phase>
            <goals>
                <goal>hgchangeset</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Затем я использую свойство ${changeSet} для установки свойства build.number в том же pom.xml:

<build.number>${changeSet}</build.number>

Однако IntelliJ IDEA жалуется, что он Cannot resolve symbol 'changeSet':

введите описание изображения здесь

Кроме того, корень модуля и затронутые файлы pom.xml подчеркнуты красным цветом в окне инструмента проекта.

Я попробовал все предлагаемые опции Alt + Enter и конфигурации Maven в настройках; ничего не помогло.

Все строит и работает нормально, я просто хочу избавиться от раздражающей ошибки, отображаемой в среде IDE. Любое предложение?

IDE и среда:

IntelliJ IDEA 2016.1.2
Build #IC-145.972, built on May 14, 2016
JRE: 1.8.0_65-b17 amd64
JVM: Java HotSpot(TM) 64-Bit Server VM by Oracle Corporation
4b9b3361

Ответ 1

Да, это выглядит сломанным

Интересно. Я тестировал это поведение как в IntelliJ IDEA Ultimate 14.1.7, так и в IntelliJ IDEA Community 2016.1.2, а свойства, которые IDEA не знает, по-прежнему отображаются как красные, даже если все проверки Maven отключены. Это выглядит ошибкой (или, если можно так выразиться, нереализованной функцией) в IDEA, что ошибка, которую он дает, когда она не может идентифицировать свойство, не контролируется настройками проверки.

В отладчике ошибок IDEA есть пара вопросов:

Там также сообщение о подобной проблеме на форуме поддержки JetBrains:

Возможное обходное решение

Там обходной путь указан как в комментариях IDEA-96358, так и в сообщении поддержки. Вы можете добавить фиктивную версию своих динамических свойств в настройках/сборке, выполнении, разработке/сборке/Maven/Runner/Properties, как на этом скриншоте: Снимок экрана с настройкой свойств Maven Runner

Ввод значений там позволит IDEA узнать о них, чтобы они не выделяли их красным цветом. Тем не менее, я обнаружил в своем тестировании, что, поскольку IDEA передавал значения как свойства Maven, они не перезаписывались плагином buildnumber, и вместо этого я видел свое фиктивное значение, когда я пытался его использовать. (Единственный способ, с помощью которого я его тестировал, был в оценке maven-help-plugin, но, возможно, он работает, когда используется другим способом?) Чтобы иметь возможность использовать динамически настроенное значение, в моей конкретной конфигурации сборки я снял флажок "Использовать параметры проекта" и удалил свойство "фиктивный", как показано на этом снимке экрана: Снимок экрана с удалением свойства из конкретной конфигурации сборки

Это начинает довольно неприятное обходное решение, как если бы у вас было много конфигураций сборки Maven и, как и возможность для них всех по умолчанию для одних и тех же параметров бегуна, теперь вам придется дублировать "настоящую" настройку вы хотите в каждой конфигурации и по умолчанию в диалоговом окне настроек проекта должны быть только значения "dummy", чтобы IDEA знал, что он не должен рассматривать ссылку на это свойство как ошибку. Это также требует, чтобы вы запускали все ваши команды Maven с помощью конфигураций сборки, а не с помощью других средств, например, двойного щелчка по жизненным циклам в окне инструментов "Maven Projects". Хотя, если у вас мало конфигураций сборки, это единственный способ запустить Maven изнутри IDEA, а красный цвет при редактировании файла pom.xml вас раздражает, возможно, это обходное решение является приемлемым компромиссом для вас.

Дальнейшие шаги

Похоже, что встроенная функциональность IDEA на самом деле не покрывает динамически генерируемые свойства, я думаю, что единственный реальный способ исправить это - убедить JetBrains в этом, если только не будет возможности добавить функциональность в третий плагин -party (который сейчас очень выходит за рамки моего опыта). Я предлагаю либо проголосовать, либо прокомментировать один из билетов в системе отслеживания JIRA, о котором я упоминал, или создать свой собственный, если вы считаете, что ваша проблема достаточно различна (что может быть). Кроме того, вы можете обратиться в службу поддержки JetBrains, особенно если у вас есть платная подписка на них. Хотя я подозреваю, что у них есть много приоритетов для работы (как и у всех нас), я также подозреваю, что больше людей, просящих что-то, увеличивает вероятность того, что он двинется к началу своего отставания. Спросить красиво о чем-то редко болит.

Ответ 2

Как работает нормально. Я думаю, что это будет некоторый кеш или может быть небольшая ошибка, которая не имеет большого эффекта, давая некоторую информацию. Поэтому я хочу предложить вам несколько вариантов

Предложение-1:

Вы можете восстановить свой проект, а затем проверить

Build > Rebuild Project

Предложение-2:

Вы можете очистить свои явные кэши.

  • File -> invalidate caches
  • Затем Restart application

Предложение-3:

Иногда глупый трюк может решить проблему.

  • Щелкните правой кнопкой мыши на редакторе кода
  • Наведите указатель мыши на Maven и разверните
  • Нажмите Reimport

Предложение-4:

Есть несколько способов решения проблемы, а также обсуждение того, что происходит с версией. Вы можете пройти через

Проверка IntelliJ дает" Невозможно разрешить символ " но все еще компилирует код

Предложение-5:

Вы можете попробовать блог Michał Wróbel: Невозможно разрешить символ XYZ в IntelliJ, хотя maven правильно строит источники

Предложение-6:

Вы также можете disable reading pom.xml при каждом небольшом изменении в IntelliJ Idea: Intellij IDEA и Maven, отключите чтение pom.xml при каждом небольшом изменении даже без сохранения

Ответ 3

Попробуйте Файл- > Настройки- > Редактор- > Инспекции- > снимите флажок "Maven Model Inspection" и примените.

Ответ 4

Вопрос задает вопрос о том, как деактивировать проверку из-за неподключенной ошибки IntelliJ, вызывающей ложные ошибки для синтаксиса "$ {dynamic.variable}" в динамических переменных pom.xml.

Вместо этого, это обходной путь для ошибки, поэтому уведомление о ложной ошибке исчезает, и maven все еще принимает переменную, и все довольны:

Изменить синтаксис переменных в этом порядке (без шуток): 1. "$ {dynamic.variable}" 2. "{dynamic.variable}" 3. "{$ dynamic.variable}"

IntelliJ теперь примет это как правильное, и maven также проанализирует и примет динамическую переменную без проблем. Очевидно, это недокументированный синтаксис maven, который по какой-то причине был реализован как правильный и единственный синтаксис в IntelliJ IDE.

Надеюсь, это поможет всем, несмотря на то, что он не отвечает на фактически заданный вопрос, но устраняет причину его запроса.

Повеселись :)

Ответ 5

С уважением, ни одно из решений SkyWalkers не сработало для меня.

Но это дит:

Просто добавьте это выше строк свойств:

<!--suppress UnresolvedMavenProperty -->

Так что в итоге вы получите:

<!--suppress UnresolvedMavenProperty -->
<git.version>${git.commit.time}.${git.commit.id.abbrev}</git.version>