2013-06-20 3 views
7

Журнал проблем в eclipse показывает: «Цикл был обнаружен в пути сборки проекта ...». Любая идея, что делать, чтобы избавиться от этих циклических зависимостей? Я не знаю, какие проекты зависят друг от друга.Как решить циклическую зависимость между различными модулями в проекте в eclipse?

+0

Вы можете скопировать/вставить все сообщение об ошибке в свой вопрос? Примечание. Вы можете определить, какие зависимости существуют для проекта, щелкнув правой кнопкой мыши, выбрав «Свойства» и перейдите к «Ссылки на проект». –

+0

Кроме того, ссылки на проекты обычно не устанавливаются случайно. Используете ли вы систему сборки, такую ​​как Maven? –

+0

Я использую систему сборки Ant. –

ответ

2

В настройках проекта вы можете видеть зависимости, что вы можете сделать, это удалить все зависимости и добавить один раз за другим. Цикл означает, что вы не должны были этого делать. Ваши решения после определения классов, пусть говорит ваш большой проект А требует класса CB1 из вторичного проекта B и CB1 требует, класс CA1 от проекта А:

  • Переместить класс CB1 в проекте А, чтобы удалить зависимость - -> работает, если он не создает больше зависимостей.
  • извлекайте интерфейсы и используйте не зависимые интерфейсы (вам может потребоваться создать суперкласс или больше интерфейсов в зависимости от вашей структуры).
  • реализовать по-разному, зачем вам нужен класс из другого проекта? попробуйте использовать общие родительские классы, если они есть
+0

Подсказка для тех, кто использует более двух плагинов (мы используем более 700) и получаем эту ошибку, например, во время слияния: если вы войдете в свой манифест (MANIFEST.MF) -> Зависимости (вкладка) -> Зависимость Анализ, который у вас есть «Ищите циклы в графике зависимостей», который покажет вам, где у вас эти циклы. Поэтому будет легче выяснить, с чего начать. Приветствия. – mtfk

12

Вы можете регулировать степень тяжести круговое зависимостей в затмении:

Preferences > Java > Compiler > Building > Build path problems > Circular dependencies 
+1

Это не устраняет проблему. Он просто зарывает его. –

+1

@ Joris: то, что вы предложили, является временным решением этой проблемы. Haan приложение отлично работает с этим параметром, но позже может оказаться большой проблемой, поскольку это может вызвать нежелательные ошибки в приложении. –

+1

Спасибо, чувак !!!! Моя проблема была НЕ с maven (работает с консоли), но с глупым Eclipse. – MeIr

3

Циклическая зависимость в затмении указывает на то, что существует цикл в buildpaths между проектами в Eclipse.

Так что если у вас есть 5 проектов, скажем, A, B, C, D и Е, то циклическая зависимость может быть, что:

  1. требует B в его наращивании пути
  2. B требует D в своем пути наращивания
  3. D требует в своем пути наращивания

Следовательно A->B->D->A является циклом.

Из-за этого цикла Eclipse не знает, какой проект нужно скомпилировать первым.

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

0

Чтобы узнать зависимости между простыми проектами Java, откройте «Свойства проекта» | Путь сборки Java | Проекты. Если у вас есть проекты J2EE, в Project Properties | Ссылки на проекты. Проверьте их для всех своих проектов, постройте график на листе бумаги (или экране) и посмотрите, что вы можете сделать, чтобы разбить цикл.

Обычно граф здоровой зависимости имеет форму звезды с основным проектом, содержащим общие ресурсы, и каждый листовой проект, реализующий определенные функции пользователя. В деталях, ядро ​​может фактически состоять из нескольких взаимозависимых проектов; то же самое для больших листьев.

Типичный выход из цикла зависимости - это объединение нескольких тесно связанных проектов.

0

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

0

Я давно столкнулся с этой проблемой, и хотя я забыл, как я это решил, когда дело дошло до общения из класса в требуемом проекте с одним из требуемого проекта, у меня была sendee устанавливает объект java.lang.reflect.Method в отправителе, где он может быть вызван без объявления класса отправителя в коде отправителя.

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

Как и другие ответы, похоже, это не настоящая округлость, а скорее артефакт дизайна Eclipse.

2

Есть три способа удаления циклической зависимости между проектами в затмении,

1.Go в Проект-> Java от компилятора> Здание -> Включить конкретные параметры проекта.
Выберите проблемы с контуром сборки и предоставьте предупреждение в качестве опции для циклической зависимости.

2.Go project-> java build path. На вкладке «Проекты» выберите проект и удалите его.

3.Пойдите в папку META-INF, откройте MANIFEST.MF. На вкладке просмотра MANIFEST.MF вы можете увидеть циклически зависимый проект в столбце «Импорт пакета:».
Удалите проект из столбца.

Первый вариант действительно не разрешает ошибку. Второй и третий варианты - это правильный способ разрешить эту зависимость.

Смежные вопросы