Intellij IDEA редактор: порядок пути к классам - PullRequest
8 голосов
/ 12 декабря 2011

Я пытался найти решение для этого, но безуспешно: В Intellij IDEA я настроил набор модулей, чтобы у меня было следующее:

  • MyВеб-проект (все зависимости модуля установлены в «Runtime»)
  • Зависимость моего веб-проекта # 1 (+ артефакт, который копирует JAR в MWP / WEB-INF / lib)
  • Зависимость моего веб-проекта #2 (+ артефакт, который копирует JAR в MWP / WEB-INF / lib)

Зависимость # 1 имеет класс org.acme.foo, но так же как и MWP, и определение отличается (ох, радость).Он строит нормально - весь код в MWP правильно строится против классов в MWP вместо Dependency # 1.

Но ... в своем редакторе Intellij дает мне красную кривую, потому что он предпочитает ссылаться на класс вЗависимость # 1 с ее несовместимым определением.

Игнорируя тот факт, что действительно не должно быть этого столкновения класса / пакета, может ли кто-нибудь помочь мне подтолкнуть Intellij к просмотру класса в локальном модуле, а не накласс в зависимости?

РЕДАКТИРОВАТЬ: я использую последний Intellij 11.

РЕДАКТИРОВАТЬ: для тех, кто нашел этот вопрос, эти проблемы исчезли в Intellij 12 +

Ответы [ 4 ]

13 голосов
/ 22 мая 2013

У меня была эта проблема, и я использовал ответ Владимира, который сработал (отсюда и мое возражение), но, к сожалению, я обнаружил, что мне нужно продолжать редактировать файл .iml, так как он постоянно переписывался. После некоторых копаний я нашел, как это изменить навсегда:

Перейдите в Файл -> Структура проекта -> Модули -> -> вкладка Зависимости

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

10 голосов
/ 19 марта 2012

Я столкнулся с той же проблемой в IntelliJ 11 (версия для Mac OS X).

Я вручную отредактировал файл .iml своего проекта и перестроил зависимости в правильном порядке: я поместил элемент orderEntry, содержащий правильную версию файла .jar, сверху.

Надеюсь, это поможет.

1 голос
/ 02 марта 2017

В моем случае это хорошо сработало в Eclipse, но произошло в IntelliJ. Причина в том, что инструменты загружают библиотеки / библиотеки в зависимости от различных механизмов:

  • Затмение: файлы .classpath
  • IntelliJ: * .iml файлы

У меня куча библиотек / библиотек в каталоге. Каталог включается в файл * .iml, как этот <orderEntry type="library" name="external-libs" level="project" /> Имеется конфликт между двумя библиотеками / библиотеками (оба содержат «org.joda.time.DateTime» в моем случае). Но 2 DateTimes имеют разные функции. Я должен указать, что один из них должен быть загружен перед другим.

Решение:

  1. Перейдите в «Файл-> Структура проекта-> Зависимости»
  2. Нажмите кнопку «+» внизу, чтобы включить lib / jar, который я хочу загрузить первым.
  3. Используйте кнопки вверх / вниз для перемещения только что включенного lib / jar над каталогом конфликтов / jars / libs.
  4. Перестройте проект.

Смотрите скриншот. joda-time-2.4.jar добавлен над external-libs для управления последовательностью загрузки. joda-time-2.4.jar is added before external-libs to be loaded first.

0 голосов
/ 12 января 2012

У меня похожая проблема, которую я пытаюсь решить.

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

Сценарий1) Ваш класс относится к классу на пути к классам дальше по цепочке, чем тот, который также найден в банке, однако в операторе импорта оператор импорта имеет вид

import com.company.classes.to.use.*

Путем их увеличения,Кажется, IDE собирает все классы в этом пакете из одной и той же папки.Разбивая их на отдельные операторы класса импорта, IDE будет подбирать их по отдельности.

Сценарий 2) Вы классифицируете методы последовательного подключения для переопределенного класса.

something.getSomethingElse().getAnotherThing().getYetAnotherThing();

, если getSomethingElse () возвращаетобъект, которого нет в классе (поэтому вам не нужно его импортировать), тогда вы все равно получите ошибку.(При добавлении импорта строка становится серой, поскольку она распознает, что она не используется, поэтому это не помогает).В любом случае, я бы не потворствовал этому методу.

edit: Очевидной альтернативой этому является рефакторинг кода, чтобы разбить строку на

ObjectToImport obj = something.getSomethingElse();
result = obj.getAnotherThing.getYetAnotherThing();

и затем импортировать переменную temp ...

Очевидно, что это не идеально, и вы не должны реорганизовывать свой код ради вашей IDE, но это необходимо, эти красные линии чертовски меня раздражают.

Надеюсь, это поможет.Если вы нашли лучшее решение, пожалуйста, поделитесь!

С уважением, M

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