2008-09-15 14 views
31

Какой инструмент вы бы порекомендовали для обнаружения пакет Java циклических зависимостей,
зная, что цель состоит в том, чтобы список явно конкретных классов, участвующих в «цикле через-пакеты» обнаружены?определение цикла пакета Java: как найти конкретные классы?

Я знаю о classycle и JDepend, но оба они не могут отображать классы, связанные с зависимостью циклического пакета.
Metrics имеет интересное графическое представление циклов, но опять-таки ограничивается пакетами и довольно трудно читать.

Я устаю, чтобы получить:

"у вас есть зависимость пакета цикла между этими 3 пакетами
у вас есть ххе классы в каждом
удачи найти правильные классы и прервать этот цикл "

Вы знаете какой-либо инструмент, который принимает ex чтобы на самом деле объяснить вам, почему цикл обнаружен (т. 'список вовлеченных классов')?


Riiight ... Пора объявить результаты:

@ l7010.de спасибо за усилия. Я буду голосовать за вас (когда у меня будет достаточно репутации), особенно для ответа CAP ... но CAP мертв в воде и больше не совместим с моим затмением 3.4. Остальное является коммерческим, и я смотрю только на бесплатное

@ daniel6651 спасибо, но, как было сказано, бесплатное программное обеспечение только (жаль не упоминать об этом в первую очередь)

@izb как часто пользователь FindBugs (используя последнее 1.3.5 прямо сейчас), я на один клик, чтобы принять ваш ответ ... если бы вы могли объяснить мне, какой вариант активировать для findbug для обнаружения любого цикла. Эта особенность упоминается только для 0.8.7 version in passing (ищите «Новый детектор стиля, чтобы найти круговые зависимости между классами '), и я не могу его протестировать.
Обновление: теперь работает, у меня был старый конфигурационный файл findbugs, в котором эта опция не была активирована. Я все еще люблю CAD хотя;)

ОТВЕТ является ... см my own (second) answer below

+0

Просто поставьте ответ в вопросе. Информация о джипах вместе. – 2009-12-01 08:11:31

ответ

0

один инструмент, который делает это программное обеспечение томографа http://www.software-tomography.com/ это коммерческий и пользовательский интерфейс отстой: о

1

И вы можете использовать инструмент CAP с открытым исходным кодом, который является плагином eclipse. http://cap.xore.de/ CAP имеет графическое представление пакета, которое покажет вам линии для классов, поэтому после нескольких щелчков мыши (в зависимости от размера круга) вы найдете виновника.

0

Есть некоторые коммерческие инструменты: Structure101 & Lattix, которые могут быть использованы для этой цели.

1

a первый возможный ответ - ... нет симпатичный. Но он начинает делать то, что я хочу. (лучшим решением является presented below)

Dependency Finder! Download it, распакуйте его.

Не самый современный или активный проект, но если вы редактируете [Dependency Finder] /bin/DependencyFinder.bat, добавьте его путь для DEFAULT_DEPENDENCYFINDER_HOME, установите JAVA_HOME, вы можете запустить его.

Затем вы нажимаете кнопку «Извлечь» (CTRL-E - первая кнопка), вводите путь к классам и отскакиваете.

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

только
  • Выбрать «классов» в левой части («элементы программирования»)
  • только Выберите «классы» в правой части («закупорка»)
  • добавить «/javax?./,/ org./,/sun./»в качестве исключения шаблона (для обоих элементов программирования и закрытия)
  • Нажмите на колесах (последняя кнопка - Compute все - CTRL A)

и здесь вы идете.
Всякий раз, когда вы видите '< ->', у вас есть хорошая циклическая зависимость.
(При выборе «функции» на стороне «закрытия»,
вы можете даже не знать, что делает функция запуска цикла - удивительный -)

Я готов испытать любые другие предложения.

21

Ну ... после тестирования DepFinder presented above, оказывается, он отлично подходит для быстрого обнаружения простых зависимостей, но это не очень хорошо масштабироваться с числом классов ...

Так REAL Действительное ОТВЕТ является : CDA - Class Dependency Analyzer

это быстро, уточненный, проста в использовании и обеспечивает графическое представление классов и их циклическими зависимостями. Мечта сбылась;)

Вы должны создать рабочий набор, в котором вы вводите только каталог ваших классов (.class) (нет необходимости иметь полный путь к классам)
Опции «Обнаружение циклических зависимостей - ALT - C «работает как реклама и не требует 100% от процессора в течение нескольких часов для анализа моих 468 классов.
Примечание. Чтобы обновить рабочее пространство, вам нужно открыть его снова (!), Чтобы вызвать новое сканирование ваших классов.

screenshot

+0

действительно хороший инструмент. – 99Sono 2016-05-28 12:04:01

3

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

См http://www.sonarsource.org/fight-back-design-erosion-by-breaking-cycles-with-sonar/

+2

Эта функция была удалена из SonarQube 5.2 ([SONAR-6553] (https://jira.sonarsource.com/browse/SONAR-6553)). – SEBiGEM 2016-03-14 10:36:31

3

Highwheel обнаруживает циклы класса и пакета, и сообщает источник зависимостей вплоть до уровня класса/метода/поля, указывающего тип отношений (наследование, композиция, часть способа подписи и т.д.) ,

Он также разбивает большие циклы на свои подэлементы, которые можно понимать/решать индивидуально.

https://github.com/hcoles/highwheel

Выход HTML со встроенным SVG, который требует современного браузера.