Пакеты P1 и P2 имеют цикл зависимостей, но ни один класс P1 не использует P2 (проанализировано jdepend) - PullRequest
1 голос
/ 12 октября 2011

Общий вопрос о зависимости пакета

При каких обстоятельствах может возникнуть цикл зависимости между пакетами P1 и P2, если ни один класс и интерфейс P1 не используют P2?Т.е. откуда берется "скрытая зависимость"?

Конкретный пример с jdepend

jdepend говорит, что у меня есть зависимость пакета между stsimulator и stsimulator.ststraversal, но нет класса или интерфейса stsimulator использует любую часть stsimulator.ststraversal, то есть

  • Исследователь зависимостей jdepend в Eclipse говорит об этом, и
  • все классы / интерфейсы stsimulator не импортируют сцимулятор. * Ииспользуйте строку "ststraversal".

Как это может быть?

Часть моего цикла зависимости пакета, напечатанная jdepend

--------------------------------------------------
- Package Dependency Cycles:
--------------------------------------------------

stsimulator
    |
    |   stsimulator.ststraversal
    |-> stsimulator


stsimulator.sts
    |
    |   stsimulator.interpreter.javacc
    |-> stsimulator
    |   stsimulator.ststraversal
    |-> stsimulator

stsimulator.ststraversal
    |
    |   stsimulator
    |-> stsimulator.ststraversal

1 Ответ

5 голосов
/ 14 октября 2011

То же самое случилось с нами. Сценарий был следующим:
У нас были тестовые классы в одной структуре пакета, но в разных исходных каталогах. И фактический код, и тестовый код были скомпилированы в один и тот же выходной каталог (это значение по умолчанию в Eclipse, если вы не укажете иначе, я думаю). Поскольку JDepend не анализирует исходный код, а скомпилированный код, наши тестовые классы случайно ввели фантомные зависимости между пакетами.

...