Когда я пытаюсь экспортировать подключаемый модуль с помощью Eclipse, я получаю сообщение об ошибке «При создании пути к классам был обнаружен цикл».

Далее следует список плагинов, который, по-видимому, показывает цикл в такой форме:

a.b.c.plugin-u_version,
**a.b.c.plugin-w_version**,
a.b.c.plugin-x_version,
a.b.c.plugin-y_version,
a.b.c.plugin-z_version,
**a.b.c.plugin-w_version**.

Обратите внимание, что согласно этому списку, похоже, что plugin-w зависит от plugin-z, но plugin-z зависит от plugin-w.

Когда я проверяю зависимости этих плагинов, открывая MANIFEST.MF и проверяя вкладку Dependencies, а также просматривая свойство Required-bundle: в манифесте, я подтверждаю все эти зависимости, вплоть до самой последней.

То есть в MANIFEST.MF для a.b.c.plugin-z я не вижу зависимости от plugin-w.

Я правильно читаю ошибку? Если да, как я могу отладить причину ошибки?

0
martin jakubik 1 Апр 2011 в 20:32
1
Зависит ли какой-либо из плагинов z от w?
 – 
katsharp
1 Апр 2011 в 21:03
Я не думаю, что какие-либо плагины, от которых зависит z, зависят от w. Это основано на том, что я смотрю на атрибут Require-Bundle файла манифеста каждого подключаемого модуля. Однако, похоже, существует проблема, когда в одном из подключаемых модулей есть фрагмент (назовите его x.1), который зависит от w. Я постараюсь изложить это как ответ.
 – 
martin jakubik
4 Апр 2011 в 14:06

2 ответа

Лучший ответ

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

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

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

Назовем плагин, которого нет в цепочке зависимостей, «plugin.x1».

В файле MANIFEST.MF для plugin.x1 я вижу атрибут «Fragment-Host: a.b.c.plugin-x». Этот атрибут делает plugin-x зависимым от plugin-x1.

Но другой атрибут в файле MANIFEST.MF для plugin.x1 гласит: «Import-Package: a.b.c.plugin-w».

Итак, зависимость такова: w зависит от x; x - хост фрагмента для x1; и x1 зависит от w. Таким образом цикл.

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

Быстрое и грязное решение, которое мне подходит: закрывайте проект plugin.x1 всякий раз, когда я хочу экспортировать свой plugin.u.

1
2 revs 10 Апр 2011 в 11:55

Еще одно быстрое и грязное решение - установить флажок «Разрешить двоичные циклы на целевой платформе» в нижней части окна экспорта.

1
Rick 10 Фев 2014 в 22:38