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

Цикл был обнаружен в пути сборки проекта xxx - Ошибка пути сборки

Я собираюсь преобразовать свои проекты в пакеты OSGI, используя maven и eclipse. Maven строит материал просто отлично, только я получаю вышеуказанную ошибку сейчас в Eclipse. Как я могу узнать, какой проект вызывает это? Есть особый взгляд или что-то еще? Как это может случиться, я бы ожидал, что maven также сможет обнаружить циклические зависимости?

Обновление

Хорошо, я нашел что-то здесь а также здесь

Может ли это быть вызвано felix maven-bundle-plugin, который делает для каждого экспорта также импорт?

4b9b3361

Ответ 1

Отметьте круговые зависимости как "Предупреждение" в инструменте Eclipse, чтобы избежать ошибки "CYCLE WI DEDEDED IN BUILD PATH".

В Eclipse перейдите к:

Windows → Настройки → Java- > Компилятор → Строительство → Круговые зависимости

Ответ 2

Когда у нас есть несколько проектов в рабочей области, мы должны установить ссылки между проектами, а не между проектами. Если P1 ссылается на P2, P2 ссылается на P3 и P3 ссылается на P1. Это вызовет цикл.

Решение состоит в том, чтобы нарисовать диаграмму ссылки между проектами в рабочей области. Проверьте путь сборки Java для каждого из проектов, чтобы увидеть окно вкладки "Проекты". Выньте проект, который ссылается на основной проект, например. P3 ссылается на P1 в этом примере выше.

Детальная операция - выбрать проект P3 в RAD ИЛИ eclipse, щелкнуть правой кнопкой мыши по проекту и выбрать опцию свойств, он откроет новое окно для свойств P3. Нажмите "Путь сборки Java", выберите опцию "Проекты". Вы можете видеть, что P3 ссылается на P1 в поле. Выберите ссылку P1, нажмите кнопку "Удалить" в правой части окна. Затем нажмите "ОК". IDE автоматически начнет путь reset.

Готово.

Сохраняйте все ссылки с неправильной ссылкой в ​​каждом проекте, пока не найдете правильные ссылки на каждый из проектов на вашей диаграмме. Удачи!

Ответ 3

У меня это было из-за того, что один проект ссылался на другой.

  • Удалить ссылку из проекта A в проект B
  • Попробуйте запустить файл, он сломается
  • Повторно добавить ссылку
  • Очистить/очистить и построить
  • Назад в бизнес

Ответ 4

Говоря простыми словами, цикл является, когда расслоение A зависит от расслоения B, которое зависит от расслоения A. Если это исходный код, то нет возможности построить отдельные пакеты отдельно за один проход.

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

Существует поддержка двоичных циклов в последних версиях Eclipse: Блог Eclipsesource

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

И следите за тем, используете ли вы фрагменты OSGi (общий шаблон для модульного тестирования), так как очень легко ввести циклы.

Редактор манифеста Eclipse имеет функциональность на вкладке "Зависимости" для поиска циклов (вам нужно нажать "Анализ зависимостей" ), но я никогда не видел, чтобы он показывал цикл, даже когда Eclipse имеет большой красный X-рассказ меня там цикл!

Ответ 5

Проблема

У меня есть старый проект, который проверяет две различные реализации интерфейса Dictionary. Один из них - несортированный ArrayList, а другой - HashTable. Эти две реализации синхронизированы, поэтому можно сделать сравнение. Вы можете выбрать, какая структура данных из командной строки args. Теперь.. У меня есть другая структура данных, которая является древовидной структурой. Я хочу проверить время его, чтобы сравнить его с HashTable. Итак.. В новом проекте dataStructure мне нужно реализовать интерфейс Dictionary. В проекте "Словарь" мне нужно добавить код, специфичный для моего нового проекта dataStructure. Существует циклическая зависимость. Это означает, что, когда Eclipse идет, чтобы выяснить, какие проекты зависят от проекта A, он находит проект B. Когда ему нужно выяснить субзависимости зависимых проектов, он находит A, который снова зависит от B. Нет дерева, а скорее графика с циклом.

Решение

Когда вы переходите к настройке пути сборки, вместо ввода зависимых проектов (вкладка "проекты" ), перейдите на вкладку "Библиотеки". Нажмите кнопку "Добавить класс папки..." (предполагая, что ваши проекты, на которые ссылаются, находятся в вашей рабочей области) и выберите папку класса. Мина - это цель. Выберите это как папку библиотеки. Сделайте это в проекте A, чтобы ссылаться на проект B. Сделайте это в проекте B для ссылки на проект A. Убедитесь, что вы не ссылаетесь на \target\projectNameFolder или у вас не будет соответствующего импорта. Теперь вам не придется удалять зависимость, а затем reset, чтобы принудительно восстановить.

Используйте библиотеки классов вместо ссылок на проекты.

Ответ 6

Помимо формы управления зависимостями Require-Bundle (наиболее похожего на зависимости Maven pom), также возможно иметь зависимости Import-Package. Гораздо проще вводить круговые зависимости с Import-Package, чем Require-Bundle, но YMMV.

Кроме того, проекты Eclipse имеют "ссылки на проекты", в которых говорится, какие другие проекты это зависит. Eclipse использует это на высоком уровне, чтобы решить, какие проекты строить, и в каком порядке, так что вполне возможно, что ваш Manifest.MF перечисляет все правильно, но ссылки на проект не в порядке. Щелкните правой кнопкой мыши по проекту, а затем перейдите к свойствам - вы увидите, на какие проекты вы зависите. Если вы являетесь текстовым человеком, откройте файлы .project и посмотрите, с какими из них вы зависите, вероятно, что циклическая ссылка проекта определяется на этом уровне (часто возникает, когда у вас есть зависимость от AB, а затем flipped from BA, но без обновления ссылок .project).

Ответ 7

Когда у меня были эти проблемы, он всегда был истинным циклом в зависимостях, выраженных в Manifest.mf

Итак, откройте манифест рассматриваемого проекта, на вкладке "Зависимости" посмотрите на запись "Обязательные плагины". Затем следуйте оттуда к следующему проекту (-ам) и повторите, в конце концов, цикл станет ясным.

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

Я также не знаю, почему Maven более терпим,

Ответ 8

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

Вы можете обнаружить, что в файле manifest.mf есть дополнительные объявления, отличные от тех, которые определены в pom.xml. любая дополнительная декларация могла бы ввести цикл, который не был бы явным для Maven.

Ответ 9

Я столкнулся с подобной проблемой некоторое время назад и решил написать плагин Eclipse, который показывает полное дерево зависимостей пути построения Java-проекта (хотя и не в графическом режиме - результат записывается в файл). Источники подключаемых модулей здесь http://github.com/PetrGlad/dependency-tree

Ответ 10

Попробуйте удалить ссылки и добавить их обратно, иногда eclipse ведет себя странно, потому что до тех пор, пока вы не исправите эту ошибку, он не позволит вам обновляться. поэтому попробуйте удалить все проекты зависимостей и добавить их обратно Очистить и построить

Ответ 11

Просто перезапуск Eclipse исправил проблему в моем проекте

Ответ 12

Хотя "Mark Circular Dependencies" позволяет вам скомпилировать код, это может привести к более медленной среде и будущим проблемам.

Это происходит потому, что в какой-то момент Eclipse потерял свои указания на пути сборки.

1 - Удалите проект, и он ссылается на рабочую область. 2 - Импортируйте обратно. 3 - Проверьте ссылки.

Это лучшее решение.

Ответ 13

Сегодня я столкнулся с такой же проблемой. Ошибка была подходящей. По ошибке я добавил циклическую зависимость. A зависел от B. В моем случае, по ошибке, помимо добавления B в зависимости от A. Я добавил A как зависимый от B тоже. Это была глупая ошибка.

Ответ 15

Это может произойти, если у вас есть несколько проектов, которые включают друг в друга в форме JAR. То, что я сделал, - удалить все библиотеки и зависимости проекта от пути построения, для всех проектов. Затем, по одному, я добавил зависимости проекта к вкладке "Проект", но только те, которые вам нужны. Это связано с тем, что вы можете добавить проект, который в свою очередь сам ссылается, или другой проект, который ссылается на какой-то другой проект с этой проблемой самореференции.

Это разрешило мою проблему.