Пакеты P1 и P2 имеют цикл зависимостей, но ни один класс P1 не использует P2 (проанализировано jdepend)
Общий вопрос о зависимости пакета
При каких обстоятельствах может возникнуть цикл зависимости между пакетами P1 и P2, если ни один класс и интерфейс P1 не используют P2? Т.е. откуда взялась "скрытая зависимость"?
Конкретный пример с jdepend
Jdepend говорит, что у меня есть зависимость пакета между stsimulator
а также stsimulator.ststraversal
, но нет класса или интерфейса stsimulator
использует любую часть stsimulator.ststraversal
, имея в виду
- так говорит исследователь зависимостей jdepend в Eclipse, и
- все классы / интерфейсы
stsimulator
не импортируйте stsimuator.* и не используйте строку "ststraversal".
Как это может быть?
Часть моего цикла зависимости пакета, как напечатано jdepend
--------------------------------------------------
- Package Dependency Cycles:
--------------------------------------------------
stsimulator
|
| stsimulator.ststraversal
|-> stsimulator
stsimulator.sts
|
| stsimulator.interpreter.javacc
|-> stsimulator
| stsimulator.ststraversal
|-> stsimulator
stsimulator.ststraversal
|
| stsimulator
|-> stsimulator.ststraversal
1 ответ
То же самое случилось с нами. Сценарий был следующим:
У нас были тестовые классы в одной структуре пакета, но в разных исходных каталогах. И реальный код, и тестовый код были скомпилированы в один и тот же выходной каталог (это значение по умолчанию в Eclipse, если вы не укажете иначе, я думаю). Поскольку JDepend не анализирует исходный код, а скомпилированный код, наши тестовые классы случайно ввели фантомные зависимости между пакетами.