Обнаружение циклических зависимостей с Maven - PullRequest
5 голосов
/ 22 октября 2009

В моем приложении я использую внешнюю библиотеку (Batik 1.7), которая состоит из нескольких модулей. Модули имеют несколько циклических зависимостей между собой. Это не влияет на сборку, но некоторые инструменты (например, график зависимостей M2Eclipse или отчет о зависимостях) больше не будут работать.

Есть ли хороший способ диагностировать, какие существуют циклы, и простой способ избавиться от них?

Обновление: Проблема с POM, как, например, batik-bridge зависит от batik-gvt, что, в свою очередь, зависит от batik-bridge.

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

Ответы [ 3 ]

4 голосов
/ 22 октября 2009

Я не уверен, что это связано с maven (у вас не может быть циклических зависимостей между модулями с maven), но, возможно, я чего-то не получил. Тем не менее, вы можете использовать JDepend для анализа фрагмента кода и поиска циклических зависимостей (см. Интерпретация циклов зависимости ). Если вы предпочитаете использовать JDepend из Eclipse, есть плагин JDepend4Eclipse .

Извлеките Batik из его хранилища subversion , запустите JDepend на его источниках и посмотрите, найдете ли вы что-нибудь (думаю, у вас получится). Но, честно говоря, это было легко. Избавиться от циклических зависимостей - это другая история, и это может быть не так просто. Это может включать такие задачи, как перемещение классов из одного пакета в другой, переупаковка модулей, понимание того, как работает сборка Batik (обратите внимание, что его скрипт сборки Ant имеет 2220 строк) и т. Д. Другими словами, это потребует некоторой тяжелой работы над библиотекой, которую вы изначально просто хотите использовать (и если вы не внесете эти изменения, вам, возможно, придется применить их снова с более поздним выпуском). Мой совет: подумайте дважды, прежде чем начать копать в этом направлении.

Для вашей информации есть также jdepend-maven-plugin , который полезен только в том случае, если вы хотите запустить JDepend для вашего проекта (т. Е. Вашего кода), который не является вашим запросом.

2 голосов
/ 22 октября 2009

Попробуйте запустить это из командной строки в корне вашего верхнего проекта:

mvn dependency:tree
1 голос
/ 22 октября 2009

Попробуйте использовать UCDetector , это помогает находить циклы зависимостей на уровне класса при разработке. Еще один полезный инструмент - Tattletale .

Он предоставляет вам отчеты, которые могут вам помочь

  • Определение зависимостей между файлами JAR
  • Найти пропущенные классы из пути к классам
  • Найдите, если класс находится в нескольких файлах JAR
  • Найдите, если один и тот же файл JAR находится в нескольких местах
  • Со списком того, что требует и предоставляет каждый файл JAR
  • Проверка SerialVersionUID класса
  • Поиск похожих файлов JAR с разными номерами версий
  • Поиск файлов JAR без номера версии
  • Найдите класс в файле JAR
  • Получить статус OSGi вашего проекта
  • Удалить использование черного списка API

Я намеренно пропустил maven решения, чтобы не дублировать другие ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...