Вопрос по eclipse, java – Цикл был обнаружен в пути сборки проекта xxx - Проблема пути сборки
Я преобразую свои проекты в пакеты OSGI, используя maven и eclipse. Maven прекрасно работает, только теперь я получаю вышеуказанную ошибку в Eclipse. Как я могу узнать, какой проект вызывает это? Есть особый взгляд или что-то? Как это может произойти, я ожидаю, что maven также может обнаруживать циклические зависимости?
Обновит
Хорошо, я что-то нашелВо а такжеВо
Может ли это быть вызвано подключаемым модулем felix maven-bundle-plugin, который для каждого экспорта также выполняет импорт?
lipse, чтобы избежать ошибки «ЦИКЛ ОБНАРУЖЕН В СТРОИТЕЛЬНОМ ПУТИ».
В Eclipse перейдите по ссылке:
Windows -> Настройки -> Java-> Компилятор -> Сборка -> Круговые зависимости
мы должны установить ссылки между проектами, а не между проектами. Если P1 ссылается на P2, P2 ссылается на P3, а P3 ссылается на P1. Это вызовет цикл.
Решение состоит в том, чтобы нарисовать схему ссылки между проектами в рабочей области. Проверьте Java Build Path каждого из проектов, чтобы увидеть вкладку окна Projects. Выньте проект, который ссылается на основной проект, например, P3 ссылается на P1, в этом примере выше.
перация @Detailed состоит в том, чтобы выбрать проект P3 в RAD ИЛИ затмении, щелкнуть правой кнопкой мыши на проекте и выбрать опцию свойств, это откроет новое окно для свойств P3. Нажмите на раздел «Java Build Path», выберите вкладку «Projects». Вы можете видеть, что P3 ссылается на P1 в поле. Выберите ссылку P1, нажмите кнопку «Удалить» в правой части окна. Затем нажмите кнопку ОК. Среда IDE начнет сбрасывать путь автоматически.
Выполнено
Сохраняйте все ссылки с ошибочными ссылками в каждом из проектов, пока у вас не появятся правильные ссылки на каждый из проектов в вашей диаграмме. Удачи
цикл - это когда пакет A зависит от пакета B, который зависит от пакета A. Если это исходный код, то нет способа построить пакеты отдельно за один проход.
Поскольку проблема проявляется только в Eclipse, это может быть двоичная циклическая зависимость, а не циклическая зависимость исходного кода.
В последних версиях Eclipse есть поддержка бинарных циклов:Eclipsesource Blog
Если цикл находится в вашем коде, то я предлагаю реорганизовать код, разбив часть кода на 3-й пакет, чтобы удалить циклическую зависимость.
И будьте осторожны, если вы используете фрагменты OSGi (общий шаблон для модульного тестирования), поскольку вводить циклы очень просто.
Редактор манифеста в Eclipse имеет функциональность на вкладке «Зависимости» для поиска циклов (вам нужно нажать «Анализ зависимостей»), но я никогда не видел, чтобы он показывал цикл, даже когда в Eclipse есть большой красный X, говорящий мне, что есть цикл!
который тестирует две разные реализации интерфейса словаря. Один - несортированный ArrayList, а другой - HashTable. Две реализации рассчитаны по времени, чтобы можно было провести сравнение. Вы можете выбрать структуру данных из аргументов командной строки. Теперь .. У меня есть другая структура данных, которая представляет собой древовидную структуру. Я хочу проверить его время, чтобы сравнить его с HashTable. Итак ... В новом проекте dataStructure мне нужно реализовать интерфейс Dictionary. В проекте Dictionary мне нужно добавить код, специфичный для моего нового проекта dataStructure. Есть круговая зависимость. Это означает, что когда Eclipse отправляется выяснять, какие проекты зависят от проекта A, он находит проект B. Когда ему нужно выяснить подзависимости зависимых проектов, он находит A, который опять же зависит от B. Там нет дерева, скорее граф с циклом.
РешениПри переходе к настройке пути сборки вместо ввода зависимых проектов (вкладка «проекты») перейдите на вкладку «Библиотеки». Нажмите кнопку «Добавить папку классов ...» (при условии, что указанные вами проекты находятся в вашем рабочем пространстве) и выберите папку классов. Моя \ цель. Выберите это как папку библиотеки. Сделайте это в проекте A, чтобы сослаться на проект B. Сделайте это в проекте B, чтобы сослаться на проект A. Убедитесь, что вы не ссылаетесь на \ target \ projectNameFolder, иначе у вас не будет соответствующего импорта. Теперь вам не нужно удалять зависимость, а затем сбрасывать ее для принудительного перестроения.
Используйте библиотеки классов вместо ссылок на проекты.
Windows -> Настройки -> Java-> Компилятор -> Сборка -> Круговые зависимости
не решайте проблему, потому что eclipse не компилирует проекты, в которых есть еще один проект, а не скомпилированные.
Чтобы решить эту проблему, вы можете попытаться заставить elcipse скомпилировать каждый класс, который сможет.
Чтобы сделать это просто:
Deselect
Windows -> Настройки -> Java-> Компилятор -> Сборка -> Прервать сборку при возникновении ошибки пути сборки
Очистить и перестроить весь проект
Project -> Очистить ...
Reselect:
Windows -> Настройки -> Java-> Компилятор -> Сборка -> Прервать сборку при возникновении ошибки пути сборки
Если вы выбрали автоматическую сборку, вам не нужно будет делать это каждый раз, когда вы меняете код
на pom-зависимости Maven), также можно иметь зависимости Import-Package. Намного проще ввести круговые зависимости с помощью Import-Package, чем Require-Bundle, но YMMV.
Кроме того, в проектах Eclipse есть «ссылки на проекты», в которых говорится, от каких других проектов это зависит. Eclipse использует это на высоком уровне, чтобы решить, какие проекты создавать и в каком порядке, поэтому вполне возможно, что ваш Manifest.MF перечисляет все правильно, но ссылки на проекты не в порядке. Щелкните правой кнопкой мыши по проекту и перейдите в свойства - вы увидите, от каких проектов вы зависите. Если вы текстовый человек, откройте файлы .project и посмотрите, от кого вы зависите - возможно, вместо этого на этом уровне определяется циклическая ссылка проекта (часто это происходит, когда у вас есть зависимость от AB, а затем перевернут из БА, но без обновления ссылок на .project).
ть плагин Eclipse, который показывает полное дерево зависимостей пути сборки проекта Java (хотя и не в графическом режиме - результат записывается в файл). Источники плагина здесьhttp: //github.com/PetrGlad/dependency-tre
это всегда был истинный цикл в зависимости, выраженной в Manifest.mf
Чтобы открыть манифест рассматриваемого проекта, на вкладке «Зависимости» найдите запись «Необходимые плагины». Затем следуйте оттуда до следующего (ых) проекта (ов) и повторите, в конце концов, цикл прояснитс
Эту задачу можно несколько упростить, воспользовавшись ссылками «Анализ зависимостей» в правом нижнем углу вкладки «Зависимости». Это позволяет обнаруживать циклы и упрощать навигационные зависимости.
Я также не знаю, почему Мейвен более терпим,
ласти, и тогда все было в порядке. введите описание изображения здесь
если у вас есть несколько проектов, которые включают друг друга в форме JAR. Я удалил все библиотеки и зависимости проекта от пути сборки для всех проектов. Затем, по одному, я добавил зависимости проекта на вкладку «Проект», но только те, которые были необходимы. Это связано с тем, что вы можете добавить проект, на который, в свою очередь, ссылается сам, или другой проект, который ссылается на какой-либо другой проект с этой проблемой, ссылающейся на себя.
Это решило мою проблему.