IntelliJ не распознает некоторые операции импорта из проекта Gradle - PullRequest
0 голосов
/ 14 ноября 2018

Я работаю над проектом Gradle в IntelliJ, и некоторые пакеты не распознаются IntelliJ.Когда я захожу в Структура проекта -> Модули -> <my module> -> Зависимости, там находится файл jar, содержащий эти пакеты.(Я проверил файл jar с jar tfv <file>, чтобы убедиться, что рассматриваемые классы находятся в этом файле.)

Указанные классы выделены красным, и при наведении на них я получаю сообщения об ошибках типа "Не удается разрешить символ «somepackagename» или «Не удается разрешить символ« SomeClassName »».

Тем не менее, gradle-проект прекрасно компилируется из командной строки.

Я перепробовал все существующие предложенияЯ мог найти, но пока никто не помог.Прежде всего я уже пробовал:

  • Удаление папки .idea и повторный импорт
  • Повторный импорт проекта из корневого файла build.gradle
  • Нажатие накнопка «Обновить все gradle проекты»
  • Обновление IntelliJ
  • Нажатие на «Недействительные кэши и перезапуск»

Что можно сделать, чтобы IntelliJ распознал пакетыв этих файлах jar?

1 Ответ

0 голосов
/ 15 ноября 2018

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

В итоге, если я изменю свой корневой проект build.gradle следующим образом:

allprojects {
    repositories {
        flatDir {
            dirs 'lib'
        }
    }
    ... existing repos ...
}

и build.gradle подпроекта так:

dependencies {
    ... existing dependencies ...
    compile fileTree(dir: 'lib', include: '*.jar')
}

и затем выполните следующее:

jars=($(find /Users/me/.gradle/caches/modules-2/files-2.1/unrecognizedorg/ -name '*.jar'))
for jar in "${jars[@]}" ; do
    cp "$jar" ~/myproject/lib/
done

и затем обновите Gradle в IntelliJ, файлы будут распознаны.

Конечно, тогда у меня проблема с папкой lib с jar-файлами, которые я не хочу фиксировать в своем проекте, но есть способы обойти это. Также существует проблема поддержания этих папок в актуальном состоянии при изменении каких-либо зависимостей.

Я решил эту проблему, сделав символическую ссылку на каталог кэша Gradle:

ln -s /Users/me/.gradle/caches/modules-2/files-2.1/ lib

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

Обновление

После временного удаления всех моих обходных путей, чтобы я мог оценить, как заставить IntelliJ работать без фиксации обходных путей (меняется сценарий сборки, а также символическая ссылка), я обнаружил, что он все еще работает (!). То есть теперь он работает в IntelliJ без каких-либо изменений (от меня) от состояния, которое не работало.

Вывод, который я сделал, заключается в том, что, возможно, IntelliJ имел поврежденный кеш, который был исправлен только путем распознавания банок по символической ссылке. Хотя я не пробовал, возможно, что и удаление ~ / .gradle / caches, и перезагрузка проекта имели бы одинаковый эффект.

В любом случае, выполнение шагов, описанных выше, а затем их удаление, похоже, помогает.

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