Инструменты Зависимости Класса для Java - PullRequest
9 голосов
/ 16 ноября 2011

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

IУ меня есть гигантская кодовая база, которую я хотел бы разбить на более мелкие логические единицы.Для этого мне нужно найти все запутанные / циклические зависимости и разрешить их.Из-за размера существующих спагетти единственно возможной стратегией является «разделяй и властвуй», поэтому мне нужно сначала разбить огромный проект на более мелкие части или отделить независимые части и заняться небольшими частями отдельно.

Кажется, что большинство инструментов, которые я могу там найти, работают только на уровне класса или пакета, но, похоже, они не поддерживают концепцию подпакетов.Например, если у меня есть корневой пакет, 3 пакета под ним, а затем по 5 подпакетов под каждый из 3, то я получу 1 + 3 + 15 = 19 пакетов, что даст мне безумно сложный график.Теперь я надеюсь, что смогу сначала проанализировать отношения зависимостей между 3 пакетами верхнего уровня (количество входящих / исходящих пакетов и какие классы порождают эти зависимости), очистить их на этом уровне, прежде чем погрузиться в эти топы.пакеты уровней для работы на следующем уровне.

Теперь я использовал для этой цели Structure 101, и он отлично работает, но когда истекает срок пробной версии, цена продукта становится немного выше моего бюджета,Есть ли бесплатное решение с открытым исходным кодом?

Заранее спасибо!

Ответы [ 7 ]

5 голосов
/ 16 ноября 2011

Насколько мне известно, не существует бесплатного инструмента, который отдаленно сопоставим с структурой 101 .(Я не аффилирован!)

Итак, у вас уже есть решение, но вы говорите, что цены слишком высоки.Это может быть ошибкой.

У меня есть гигантская кодовая база, которую я хотел бы разбить на более мелкие логические единицы.

Предположительно, вы не делаете это длязабавно, но кто-то платит тебе за это.900 долларов США для структуры 101 - это примерно 3-4 дня работы - при условии, что вы зарабатываете что-то вроде 40 тыс. Гонконгских долларов (5200 долларов США) в месяц в качестве старшего разработчика программного обеспечения в Гонконге.Должна быть возможность выдвинуть аргумент, что это в конечном итоге сэкономит много денег.

2 голосов
/ 10 декабря 2011

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

это хороший инструмент.

1 голос
/ 29 марта 2017

проект: https://github.com/lukehutch/fast-classpath-scanner

как использовать последние советы / новости: https://github.com/lukehutch/fast-classpath-scanner/releases

предварительно скомпилированные банки + источник: https://oss.sonatype.org/#nexus-search;quick~fast-classpath-scanner

пример: https://github.com/lukehutch/fast-classpath-scanner/wiki/3.9.-Generating-a-GraphViz-dot-file-from-the-classgraph

ScanResult scanResult = new FastClasspathScanner(
  MyClass.class.getPackage().getName()).scan();
String str = scanResult.generateClassGraphDotFile(9.2f, 8.0f);

Files.write(str, new File("GraphViz.dot"), StandardCharsets.UTF_8);

System.out.println("now run this at terminal: dot -Tsvg < GraphViz.dot > GraphViz.svg");
1 голос
/ 06 ноября 2013

Посмотрите на CodePro Analytix .У него есть несколько инструментов для анализа зависимостей плюс множество других вещей, о которых вы должны знать.

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

0 голосов
/ 27 июля 2018

Попробуйте FastClasspathScanner: https://github.com/fast-classpath-scanner/fast-classpath-scanner (Отказ от ответственности, я автор)

Например:

try (PrintWriter out = new PrintWriter("/tmp/classgraph.dot")) {
    out.print(new FastClasspathScanner()
        .whitelistPackages("com.xyz")
        .enableAllInfo()
        .scan()
        .getAllClasses()
        .generateGraphVizDotFile(
            sizeX, sizeY, showFields, showMethods, showAnnotations
        ));
}
0 голосов
/ 12 марта 2015

Отказ от ответственности : я являюсь автором coffea

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

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

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

0 голосов
/ 17 ноября 2013

Вы просматривали плагины ObjectAID или PlantUML для затмения? Не такой надежный, как то, о чем вы спрашиваете, но определенно бесплатно предоставляет несколько хороших механизмов моделирования UML.

...