Следующее решение не работает вообще, но как обходной путь:
Вместо проверки того, имеет ли дерево прямую зависимость от пакета, вы проверяете косвенную зависимость от пакета (т. Е. Приводит ли дерево к циклу пакета) через p.containsCycle()
, но только после следующего кода:
final PackageFilter filter = new PackageFilter();
jdepend.setFilter(filter);
filter.addPackage("org.hamcrest");
Таким образом, пакеты, от которых зависит это дерево (см. Вывод, указанный в вопросе), но которые имеют сами циклы, отфильтровываются заранее.
Недостатком является то, что вам, возможно, придется добавлять пакеты в фильтр, если вы импортируете новые. И вам придется делать разные настройки для разных jdepend-тестов, потому что вы не хотите использовать этот фильтр для вычисления других метрик, таких как расстояние от главной последовательности, D. Последнее, но не менее важное, если дерево -> yourFilteredPackage является частью прямого цикла, он не будет обнаружен: (