Обнаружение цикла пакета Java:как мне найти соответствующие классы?[закрыто]

StackOverflow https://stackoverflow.com/questions/62276

Вопрос

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

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

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

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

Знаете ли вы какой-нибудь инструмент, который делает дополнительный шаг, чтобы на самом деле объяснить вам, почему обнаружен цикл (т. е."перечислите задействованные классы")?


Хорошо...Пришло время объявить о результатах:

@l7010.de:Спасибо вам за приложенные усилия.Я проголосую за вас (когда у меня будет достаточно репутации), особенно за ответ "ШАПКА"...но CAP безнадежен и больше не совместим с моим Eclipse 3.4.Остальное коммерческое, и я ищу только бесплатные программы.

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

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

ОТВЕТ таков...видишь мой собственный (второй) ответ ниже

Это было полезно?

Решение

Findbugs может обнаруживать циклические зависимости классов, а также имеет плагин Eclipse.

http://findbugs.sourceforge.net/

Другие советы

Что ж...после тестирования Поисковик, представленный выше, Оказывается, он отлично подходит для быстрого обнаружения простых зависимостей, но он плохо масштабируется в зависимости от количества классов...

Итак, РЕАЛЬНЫЙ ОТВЕТ таков:CDA - Анализатор зависимостей классов

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

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

screenshot

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

Видишь http://www.sonarsource.org/fight-back-design-erosion-by-breaking-cycles-with-sonar/

Существует также Структура 101 который должен это сделать.

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

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

На выходе получается HTML со встроенным SVG-контентом, для которого требуется современный браузер.

И вы можете использовать инструмент с открытым исходным кодом КОЛПАЧОК который является плагином Eclipse.

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

Первый возможный ответ таков...некрасиво.Но он начинает делать то, что мне нужно (лучшим решением является представлено ниже).

Поиск зависимостей! Скачай его, распакуйте его.

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

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

Самое сложное - выбрать точно правильный набор элементов "programming elements" и "closures", чтобы результат не был завален уровнем детализации.

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

И вот вы здесь.

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

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

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

Одним из инструментов, который делает это, является программное обеспечение томограф.Это коммерческое приложение, и пользовательский интерфейс - отстой : o

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top