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

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

Обновить

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

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


person Mauli    schedule 05.07.2009    source источник
comment
Важный совет по безопасности. Командная строка Maven определяет циклы внутри одного реактора. Если цикл будет открыт только при активации профиля, тогда ваша сборка командной строки не будет сообщать об ошибке, в то время как ваша сборка eclipse может. Если вы попытаетесь отладить это, обязательно активируйте все профили, чтобы включить все ваши модули (например, mvn -Pcore, buildtools dependency: tree), иначе вы можете пропустить проблему.   -  person Peter Kahn    schedule 03.07.2012
comment
Ссылки неработающие (и все равно они были одинаковыми).   -  person Noumenon    schedule 05.01.2020


Ответы (17)


Пометьте циклические зависимости как «Предупреждение» в инструменте Eclipse, чтобы избежать ошибки «ЦИКЛ ОБНАРУЖЕН В ПУТИ СБОРКИ».

В Eclipse перейдите по ссылке:

Windows -> Настройки -> Java-> Компилятор -> Сборка -> Циклические зависимости

person user2582855    schedule 15.07.2013
comment
этот ответ верен, поскольку проекты с открытым исходным кодом, использующие gradle, имеют круговую зависимость, и они нормально строятся на gradle. затмение не должно кричать об этом как об ошибке - person Siddharth; 12.10.2015
comment
Когда я это сделал, количество ошибок увеличилось с 6 до 2000+. - person Arvindh Mani; 16.11.2016
comment
Как удалить это предупреждение навсегда. Это вызывает некоторые из моих проблем, например, если есть неиспользованный импорт. - person ; 30.01.2018
comment
В моем случае количество ошибок увеличилось с 15 до 2000+, когда я внес это изменение. Любое другое решение? - person Sanchit Khera; 23.02.2018
comment
Я думаю, что это не подходящее решение, поскольку мы всегда должны устранять циклические зависимости. - person Manish; 24.07.2019

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

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

Подробная операция заключается в выборе проекта P3 в RAD OR eclipse, щелкните правой кнопкой мыши проект и выберите параметр свойств, откроется новое окно для свойств P3. Щелкните раздел «Путь сборки Java», выберите вкладку «Проекты». Вы можете видеть, что P3 ссылается на P1 в поле. Выберите ссылку P1, нажмите кнопку «Удалить» в правой части окна. Затем нажмите "ОК". IDE начнет автоматически сбрасывать путь.

Сделанный.

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

person Jack    schedule 23.12.2010
comment
Но если есть случай, на который ссылается P1, P2 ссылается на P1. Например, P1 содержит код уровня DAO, а P2 содержит служебные программы. Утилиты иногда используют слой DAO для получения свойств конфигурации из таблицы БД, а уровень DAO использует утилиты. Итак, как решить эту проблему? - person Sanjeev Kumar Dangi; 20.06.2011
comment
у меня тоже такая же проблема @Sanjeev. Есть ли у вас какое-нибудь решение, поделитесь, пожалуйста ... - person AndEngine; 23.05.2014
comment
@SanjeevKumarDangi, возможно, поместит утилиты, специфичные для DAO, в проект DAO. - person The Student; 11.04.2016

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

  1. Удалить ссылку из проекта A на проект B
  2. Попробуйте запустить материал, он сломается
  3. Повторно добавить ссылку
  4. Очистить / Очистить и построить
  5. Снова в деле
person garrett.patterson    schedule 13.01.2012

Проще говоря, цикл - это когда пакет A зависит от пакета B, который зависит от пакета A. Если это исходный код, то нет способа построить пакеты по отдельности за один проход.

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

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

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

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

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

person SteveD    schedule 07.07.2009
comment
Спасибо за подсказку о редакторе манифеста Eclipse. Анализ зависимостей ›Ищите функцию Cycles. Он действительно показывал цикл (но только в одном из пакетов цикла). - person wisbucky; 09.10.2018

Иногда отмечается как предупреждение

Windows -> Настройки -> Java-> Компилятор -> Сборка -> Циклические зависимости

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

Итак, чтобы решить эту проблему, вы можете попробовать заставить Eclipse скомпилировать каждый класс, который он может выполнить.

Чтобы это было просто:

  1. Отменить выбор

Windows -> Настройки -> Java-> Компилятор -> Сборка -> Прервать сборку при возникновении ошибки пути сборки

  1. Очистите и перестройте весь проект

Проект -> Очистить ...

  1. Повторно выберите:

Windows -> Настройки -> Java-> Компилятор -> Сборка -> Прервать сборку при возникновении ошибки пути сборки

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

person Sambuccid    schedule 01.06.2018

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

person Petr Gladkikh    schedule 14.09.2010

Проблема

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

Решение

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

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

person Ryan Zoerner    schedule 30.11.2012
comment
Я бы очень предпочел Project References, поскольку он позволяет мне переключаться между исходными кодами разных проектов (использование библиотек классов привело к тому, что я оказался в двоичных файлах, и тогда мне пришлось вручную искать соответствующие исходные файлы, что было головной болью). Однако в этой ситуации зависимости от цикла я мог решить эту проблему, только если A ссылался на B как на ссылку проекта, а B ссылался на A как на библиотеки классов. Мне пришлось пойти на небольшую жертву, чтобы решить проблему зависимости цикла. - person ADTC; 28.10.2013

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

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

person Rich Seller    schedule 06.07.2009

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

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

person AlBlue    schedule 27.07.2009
comment
+1 за упоминание проблем Eclipse с файлами .project .. Иногда единственное решение - выбросить все, что связано с Eclipse, и позволить ему снова разобраться с помпой .. - person Tim; 28.07.2009

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

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

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

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

person djna    schedule 05.07.2009

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

person sjchoudary    schedule 26.07.2013

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

person user3235783    schedule 25.01.2014

Хотя «Отметить циклические зависимости» можно скомпилировать код, это может привести к замедлению работы среды и проблемам в будущем.

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

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

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

person Machado    schedule 10.11.2014

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

person MansoorShaikh    schedule 04.04.2017

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

person Rain    schedule 06.06.2017
comment
Это не решение проблемы. Maven жалуется на циклическую зависимость артефактов. Это создаст проблемы. - person kk.; 06.06.2017

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

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

person Camilo    schedule 24.11.2017

У Eclipse была ошибка, которая сообщала о большем количестве циклов, чем необходимо. Это было исправлено в версии 2019-12. См. https://bugs.eclipse.org/bugs/show_bug.cgi?id=551105

person vogella    schedule 26.03.2020