Пакеты 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 не анализирует исходный код, а скомпилированный код, наши тестовые классы случайно ввели фантомные зависимости между пакетами.

Другие вопросы по тегам