Советы И Рекомендации По Intellij Idea: 2. Анализ Зависимостей

Как анализировать зависимости в IDEA с помощью матрицы структуры зависимостей и других инструментов.



Советы и рекомендации по IntelliJ IDEA: 2. Анализ зависимостей

Этот перевод продолжает серию про IntelliJ IDEA:

  • Лучшие плагины IntelliJ IDEA
  • Сравнение файлов и папок
  • Анализ зависимостей


Матрица зависимостей

Эта функциональность доступна только в IntelliJ IDEA Ultimate, а не в версии Community.
IDEA предлагает полезный инструмент для анализа внутренних зависимостей в вашем проекте, который называется Матрица структуры зависимостей.

Его можно использовать для анализа не только зависимостей между пакетами, но и отдельных классов.

Это может быть очень важно, поскольку тесно связанные классы и модули или даже циклические зависимости означают, что ваш код очень сложно рефакторить и повторно использовать.

Матрица структуры зависимостей, или сокращенно DSM, может помочь вам визуализировать зависимости и обнаружить потенциальные проблемы.

Во-первых, обязательно запустите команду сборки в своем проекте.

Затем запустить анализ, зайдя в меню " Анализ → Анализ матрицы зависимостей.

«Вам нужна версия IDEA Ultimate и включите включенный плагин.

DSM-анализ .

После завершения анализа вы увидите что-то похожее на это:

Советы и рекомендации по IntelliJ IDEA: 2. Анализ зависимостей

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

Советы и рекомендации по IntelliJ IDEA: 2. Анализ зависимостей

IDEA опускает метки столбцов, чтобы сэкономить драгоценное пространство, но ведет себя так, как если бы они были там.

Каждая строка и столбец представляют пакет. Каждая ячейка представляет собой пересечение строки и столбца — это два пакета.

Число в ячейке представляет количество зависимостей одного пакета от другого.

Это означает, что один класс из исходного пакета использует другой класс из целевого пакета.

Чем темнее ячейка, тем больше в ней зависимостей.

Если существует более 99 зависимостей, это показывает .

вместо числа.

Если зависимости окрашены в синий цвет, это хорошо, поскольку они односторонние.

Круговые зависимости будут показаны красным, что нехорошо.

Но мы увидим это позже.



Визуальная помощь

Матрица — мощный инструмент, способный отображать сразу много информации.

Однако поначалу может быть сложно читать, если вы не привыкли с ним работать.

Особенно со скрытыми динамиками.

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

Если вы наведете указатель мыши на ячейку, отобразится всплывающая подсказка, указывающая направление зависимости.



Советы и рекомендации по IntelliJ IDEA: 2. Анализ зависимостей

Это может быть полезно, но это еще не все.

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



Советы и рекомендации по IntelliJ IDEA: 2. Анализ зависимостей

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

  • Пакеты, от которых зависит выбранный пакет, выделены желтым цветом.

  • Пакеты, зависящие от выбранного пакета, отмечены зеленым цветом.

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

Цветовое кодирование такое же, есть только одна новая концепция.

Фиолетовая ячейка представляет зависимости между одними и теми же двумя пакетами, но в другом направлении.



Советы и рекомендации по IntelliJ IDEA: 2. Анализ зависимостей



Нам нужно пойти глубже

До сих пор мы работали только на уровне пакета.

Это, конечно, полезно, но часто приходится вдаваться в подробности.

Это означает, что необходимо также изучить зависимости между отдельными классами.

Представление DSM простое: вы можете развернуть пакеты, чтобы увидеть их содержимое.

Таким образом, вы сможете увидеть зависимости для всех потенциальных подпакетов или даже отдельных классов.



Советы и рекомендации по IntelliJ IDEA: 2. Анализ зависимостей



Круговые зависимости

До сих пор мы рассматривали только однонаправленные зависимости.

Но с чем следует быть очень осторожным, так это с циклическими зависимостями.

В представлении DSM они отмечены красным:

Советы и рекомендации по IntelliJ IDEA: 2. Анализ зависимостей

Вы можете увидеть этот класс Владелец имеет 15 зависимостей классов Домашний питомец , пока Домашний питомец имеет 5 зависимостей от Владелец .



Выполнение действий

Представление DSM IDEA — это не только полезный инструмент для визуализации зависимостей, но вы также можете выполнять множество полезных действий непосредственно из контекстного меню, щелкнув правой кнопкой мыши ячейку или пакет. Вы даже можете выполнить рефакторинг своих классов непосредственно из представления DSM. Если щелкнуть ячейку с зависимостями, можно вызвать меню Найдите способы использования зависимостей .

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

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

Результаты классифицируются по типам:

Советы и рекомендации по IntelliJ IDEA: 2. Анализ зависимостей

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



Анализ зависимостей Maven

Эта функциональность доступна только в IntelliJ IDEA Ultimate, а не в версии Community.
До сих пор мы рассматривали только внутренние зависимости в вашем собственном коде.

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

Это сторонние библиотеки для ваших проектов.

Это может сбить с толку, поскольку у вас есть не только прямые зависимости, но и ваши библиотеки имеют свои собственные зависимости (транзитивные зависимости).

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

Maven рекомендует вам создать представление в виде дерева зависимостей, которое поможет вам проанализировать потенциальные проблемы.

Вы можете просто позвонить:

  
   

mvn dependency:tree -Dverbose -DoutputFile=dependencies.txt

Maven выведет ваше дерево зависимостей в текстовом формате, который может выглядеть примерно так ( вот полный пример ):

com.vojtechruzicka:spring-boot-actuator-example:jar:1.0.0-SNAPSHOT +- org.springframework.boot:spring-boot-starter-actuator:jar:2.0.3.RELEASE:compile | +- org.springframework.boot:spring-boot-starter:jar:2.0.3.RELEASE:compile | | +- org.springframework.boot:spring-boot:jar:2.0.3.RELEASE:compile | | +- org.springframework.boot:spring-boot-autoconfigure:jar:2.0.3.RELEASE:compile | | +- org.springframework.boot:spring-boot-starter-logging:jar:2.0.3.RELEASE:compile | | | +- ch.qos.logback:logback-classic:jar:1.2.3:compile | | | | \- ch.qos.logback:logback-core:jar:1.2.3:compile | | | +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.10.0:compile | | | | \- org.apache.logging.log4j:log4j-api:jar:2.10.0:compile | | | \- org.slf4j:jul-to-slf4j:jar:1.7.25:compile | | +- javax.annotation:javax.annotation-api:jar:1.3.2:compile | | \- org.yaml:snakeyaml:jar:1.19:runtime

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

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

ОБНОВЛЯТЬ : Будь осторожен с подробный параметр при использовании maven 3.x, так как под капотом все это также использует алгоритм Maven 2 и может дать вам противоречивые результаты.

К счастью, IDEA предлагает хороший инструмент с графическим интерфейсом для работы с графами зависимостей Maven. Этот инструмент присутствует в IntelliJ уже давно, но в версии 2019.1 он получил некоторые необходимые улучшения, которые делают его гораздо более полезным в проектах с большими графами зависимостей.

Чтобы отобразить график, перейдите в файл pom.xml и нажмите Shift + Ctrl + Alt + U (или ⌥ + ⇧ + ⌘ + У на Маке).

Или щелкните правой кнопкой мыши -> Диаграммы -> Показать зависимости.

.

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

Поиск отдельных элементов вручную может быть очень болезненным.

К счастью, вы можете использовать команду Находить как обычно, используя Ctrl+Ф .



Советы и рекомендации по IntelliJ IDEA: 2. Анализ зависимостей

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

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

Первый вариант — показывать только прямых соседей.

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



Советы и рекомендации по IntelliJ IDEA: 2. Анализ зависимостей

Обратите внимание, что это работает не только для отдельных элементов: вы можете выбрать несколько элементов, удерживая кнопку.

Сдвиг .

Другой способ фильтрации — отображение цепочки зависимостей, ведущей от корня к выбранным элементам.



Советы и рекомендации по IntelliJ IDEA: 2. Анализ зависимостей

IDEA выделяет конфликтующие зависимости красным цветом.

Однако может быть сложно обнаружить, что что-то не так в огромном дереве зависимостей.

К счастью, вы можете отфильтровать только проблемные части:

Советы и рекомендации по IntelliJ IDEA: 2. Анализ зависимостей

В приведенном выше примере вы можете увидеть конфликт между версиями JUnit. Существует явная зависимость от JUnit 3.8.1 и другой версии, полученной транзитивно через весна-загрузка-стартер-тест .



Плагин-помощник Maven

Если графическое дерево зависимостей — это не то, что вам нужно, для вас есть альтернатива.

Это плагин Помощник Maven от Войтех Краса .

Он использует иерархическое текстовое представление зависимостей, аналогичное зависимость mvn: дерево , но с хорошими возможностями просмотра зависимостей.

Это также хорошая альтернатива, если вы используете IDEA Community Edition или используете более старую версию IDEA, где граф зависимостей Maven бесполезен.

Чтобы использовать анализатор зависимостей, предлагаемый этим плагином, просто откройте любой файл pom.xml. В нижней части редактора появится новая вкладка под названием Анализатор зависимостей , добавлено редактором.



Советы и рекомендации по IntelliJ IDEA: 2. Анализ зависимостей

На левой панели вы можете просмотреть свои зависимости (в виде списка или дерева).

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

Вы можете легко переключить вид, чтобы отображать только конфликты.



Анализ зависимостей Gradle

Начиная с версии 2019.2 IDEA наконец-то может показать вам диаграмму зависимостей не только для Maven, но и для Gradle. Ура! Он работает почти так же, как диаграмма зависимостей Maven. Просто перейдите в файл build.gradle и нажмите Shift + Ctrl + Alt + U (или ⌥ + ⇧ + ⌘ + У на Маке).

Или щелкните правой кнопкой мыши -> Диаграммы -> Показать зависимости.

.



Заключение

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

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

В дополнение к этому вы должны убедиться, что ваши внешние зависимости также охвачены, чего вы можете добиться, используя граф зависимостей для вашей системы управления зависимостями, такой как Maven. Теги: #java #intellij idea #плагины intellij idea

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.