IDEA JetBrains IntelliJ - Ошибка компиляции в make, но исправна при компиляции с использованием Maven, и IntelliJ не сообщило об ошибках в файле класса - PullRequest
40 голосов
/ 09 сентября 2010

Итак, у меня есть модуль maven (module-A) в IntelliJ.Недавно я переместил некоторые классы из него в другой новый модуль maven (module-B) и добавил к нему зависимость.Сделав это, я также изменил сигнатуру метода одного из перемещенных классов (теперь в модуле-B).

Я повторно импортировал poms, чтобы IntelliJ обнаружил изменения зависимостей и обеспечил правильный импорт всех Java-файлов для затронутых файлов.Теперь, когда я пытаюсь запустить свое веб-приложение (которое зависит от двух модулей), я получаю ошибку компиляции в классе в модуле-A, вызывая модифицированный метод класса в модуле-B.

Сообщение об ошибке в основном говорит о том, что этот метод не существует, но считает, что старый метод все еще существует!Я нажимаю на ошибку 'make', и это приводит меня к строке в классе в модуле-A, вызывающей модифицированный метод ... странная вещь, IntelliJ знает, что это нормально в файле.т. е. метод не подчеркнут красным, как обычно бывает при ошибке компиляции, но имя файла класса: (

Я скомпилировал его из командной строки, используя 'mvn install' (также установив модуль B)и все это успешно. Я удалил каталог классов в цели модуля-A и модуля-B, а также сделал недействительными кеши IntelliJ и перезапустил ... все еще происходит ... есть идеи?

Ответы [ 19 ]

40 голосов
/ 03 февраля 2014

Я узнал, что это может помочь:

Файл -> Неправильные кэши

21 голосов
/ 28 августа 2013

Maven Projects -> Reimport должен помочь.

16 голосов
/ 08 декабря 2012

Я потратил несколько часов на эту же проблему. Все чистки в мире не помогли.

Я удалил свою папку out и target в моем проекте и перекомпилировал - это очистило его.

Редактировать: В меню «Файл» также есть волшебная функция: «Invalidate Caches / Restart». Это исправляет кучу проблем «intellij is confused».

7 голосов
/ 29 февраля 2012

Измените настройку «Java Compiler» в IDEA (пользовательский компилятор javac в процессе), чтобы устранить проблему.

6 голосов
/ 09 сентября 2010

Попробуйте mvn clean свои проекты и mvn install свой проект B.

Интеграция maven с intelliJ является ошибкой при использовании команды make, непосредственно предоставленной Intellij. Вы должны напрямую использовать команды mvn или запускать их с панели maven.

4 голосов
/ 11 декабря 2013

Я столкнулся с очень похожей проблемой, которая сводила меня с ума.

Мой код прекрасно скомпилируется с заданием ant, которое я обычно запускаю, но не встроит IntelliJ, жалуясь на "Cannot Find Symbol blah blah"

Оказывается, вы можете добавить "исключенные" файлы для компилятора. Мой файл каким-то образом был добавлен в этот список.

Этот список находится в Файл> Настройки> Компилятор> Исключает (IntelliJ 13)

3 голосов
/ 10 июля 2015

Следующие шаги должны решить эту проблему:

  1. удалить .IntelliJIdea12 / .IdeaIC12 старше под c: / user /.../
  2. Признать недействительным кеш Intelli: Файл> Неверный кеш .
    Это переиндексирует ваше рабочее пространство при запуске, а также очищает вашу локальную историю . Прежде чем сделать это, подтвердите или создайте резервную копию всех ваших незафиксированных изменений.
  3. Как только ваше рабочее пространство вернется после индексирования, выполните maven clean install .
  4. , когда сборка прошла успешно, нажмите Maven Re-import

Это сработало для меня , я думаю, что оно должно работать и для других с аналогичной проблемой.

2 голосов
/ 02 декабря 2014

Поведение, которое я вижу, похоже на описанное автором.Маркеры ошибок отображаются в правой части редактора в Intellij 14 и менее в 13.

Это происходит также при использовании Scala вместо Java и использовании SBT вместо Maven.

Также замеченоэто происходит после загрузки второго проекта.Первое всегда хорошо.(После долгих проб и ошибок) Думаю, это может быть вызвано повреждением внутренних кешей Intellij.Иногда «недействительные кэши» работали, а иногда нет.

Я работаю с рядом проектов, использующих Play!Framework и они используют разные версии Scala и множество зависимостей.Я предположил, что кэши становятся поврежденными, потому что внутренний ключ, который использует Intellij, недостаточно хорош для обработки ситуаций, когда один и тот же класс, загруженный несколько раз в разные jar-файлы, имеет разные подписи, и это приводит к ошибкам редактора, в то время как внешние сборки работают нормально.

Тогда "Изменение расположения кэша плюща для проектов sbt в IntelliJ IDEA?"В посте была идея отделить использование SBT и Intellij кэша плюща в надежде, что путь плюща является частью ключа внутреннего кэша.

Пол Филлипс из TypeSafe предоставляет инструментальные средства «SBT extras», и здесь я нашелспособ проинструктировать SBT об использовании проекта ivy home, cache и SBT boot:

https: //raw.githubusercontent.com/paulp/sbt-extras/master/sbt

декларировать -r noshare_opts = "- Dsbt.global.base = project / .sbtboot -Dsbt.boot.directory = project / .boot -Dsbt.ivy.home = project / .ivy"

Наконец-то избавился отдомашний пользователь .ivy2 и все содержимое.Чтобы Intellij не использовал эту папку, я сделал ее только для чтения.Это была ошибка.Кажется, что Intellij молча терпит неудачу при разрешении зависимостей, если вы делаете это.

Это решило ошибки и считает, что они не вернутся.: -)

Если ребята из Intellij слышат это: пожалуйста, протестируйте свои релизы (Scala, SBT, редактор) со всеми шаблонами Play Framework от TypeSafe.Проблема быстро становится очевидной.

2 голосов
/ 10 сентября 2010

Итак, просто заявили об этом сегодня утром, и все работает!

Прошлой ночью я открыл новый проект (проект intelliJ) из родительского модуля module-A и module-B и успешно его собрал, возможно, выполнив это, а затем снова открыв исходный проект, исправив его каким-то образом ... очень раздражает, хотя

1 голос
/ 15 июня 2018

Это может произойти, если вы используете другую версию Java при сборке вне IntelljJ. У моего IntelliJ была java10, и я использовал java8 при сборке в терминале. Изменение версии Java на IntelliJ устранило эту проблему для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...