Подтвердить что ты не робот

Как найти\удалить неиспользуемые зависимости в gradle

Я хотел найти неиспользуемые зависимости в моем проекте. Есть ли функция для этого в gradle как в maven?

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ: 28-06-2016: поддержка Android для неиспользуемой зависимости

В июне 2017 года они выпустили 4.0.0 versionи переименовали имя корневого проекта "gradle-lint-plugin" в "nebula-lint-plugin". Они также добавили поддержку Android для неиспользованная-зависимость.


В мае 2016 года Gradle реализовал gradle плагин lint для поиска и удаления нежелательной зависимости

gradle Плагин Lint: полная документация

Плагин Gradle Lint - это подключаемый и настраиваемый инструмент для обработки выявление и отчетность по шаблонам злоупотребления или Gradle скрипты и связанные файлы.

Этот плагин имеет различные правила. Неиспользованное правило зависимостей является одним из них. Он имеет 3 специфические характеристики.

  • Удаляет неиспользуемые зависимости.
  • Продвигает транзитивные зависимости, которые используются непосредственно вашим кодом к явным зависимостям первого порядка.
  • Переводит зависимости в "правильную" конфигурацию.

Чтобы применить правило, добавьте:

gradleLint.rules += 'unused-dependency'

Подробности Неиспользованное правило зависимостей указано в последней части.

Применение Gradle lint плагина:

buildscript { repositories { jcenter() } }
plugins {
  id 'nebula.lint' version '0.30.2'
}

В качестве альтернативы:

buildscript {
  repositories { jcenter() }
  dependencies {
    classpath 'com.netflix.nebula:gradle-lint-plugin:latest.release'
  }
}

apply plugin: 'nebula.lint'

Определите, какие правила вы хотите использовать:

gradleLint.rules = ['all-dependency'] // add as many rules here as you'd like

Для сборки предприятия мы рекомендуем определить правила lint в init.gradle script или в Gradle script, который включается с помощью Gradle с помощью механизма.

Для проектов с несколькими модулями рекомендуется применять плагин в блоке allprojects:

allprojects {
  apply plugin: 'nebula.lint'
  gradleLint.rules = ['all-dependency'] // add as many rules here as you'd like
}


Подробности Неиспользованное правило зависимости указано в этой части

Чтобы применить правило, добавьте:

gradleLint.rules += 'unused-dependency'

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

В частности, правило выполняет следующие изменения зависимостей:

1) Удаляет неиспользуемые зависимости

  • Банки в семейном стиле, такие как com.amazonaws: aws-java-sdk удаляются, так как они не содержат кода

2) Продвигает транзитивные зависимости, которые напрямую используются вашим кодом для явных зависимостей первого порядка

  • У этого есть побочный эффект распада баров семейного стиля как com.amazonaws: aws-java-sdk в те части, которые вы на самом деле используя и добавляя их как зависимости первого порядка

3) Перемещает зависимости к "правильной" конфигурации

  • Webjars перемещаются в конфигурацию времени выполнения
  • Ящики, которые не содержат классов И контент вне META-INF, являются перемещен во время выполнения
  • 'xerces', 'xercesImpl', 'xml-apis' всегда должны быть областями среды выполнения
  • Поставщики услуг (банки, содержащие META-INF/services), например mysql-connector-java перемещаются во время выполнения, если нет доказуемого время компиляции
  • Зависимости перемещаются в конфигурацию с самым высоким исходным кодом возможное. Например, "junit" переносится на testCompile, если существует явная зависимость от него в основном наборе источников (редко).


ОБНОВЛЕНИЕ: Предыдущие плагины

Для вашей любезной информации я хочу поделиться с предыдущими плагинами

Но последняя версия 1.0.3 создана 23 декабря 2014 года. После этого обновления нет.

N.B: Многие наши инженеры путаются о этом плагине, поскольку они обновил только номер версии ничего.

Ответ 2

Мне посчастливилось использовать Gradle Плагин анализа зависимостей. Чтобы начать работу с ним, добавьте следующие две вещи в Gradle build script.

buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath "com.github.nullstress:DependencyAnalysisPlugin:1.0.3"
    }
}

и

apply plugin: "dependencyAnalysis"

Как только они будут установлены, запустите gradle analyze. Если есть неиспользуемые зависимости, вы получите отказ сборки, который показывает результат, аналогичный приведенному ниже тексту, плюс список неиспользуемых зависимостей (объявленных и транзитивных). Сбой сборки очень удобен, если вы хотите обеспечить, чтобы не было неиспользуемых зависимостей с помощью сборки CI.

:foo:analyze FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':foo:analyze'.
> The project has unused declared artifacts

Ответ 3

Проект, упомянутый в более ранних ответах, кажется, мертв. Я использую gradle-dependency-analyze. Настройка проста:

buildscript {
  repositories {
    jcenter()
  }
  dependencies {
    classpath 'ca.cutterslade.gradle:gradle-dependency-analyze:1.0.3'
  }
}

apply plugin: 'ca.cutterslade.analyze'

Тогда do:

$ gradle analyzeDependencies

Ответ 4

Проекты по большинству исторических ответов мертвы, но gradle-dependency-analyze кажется живым на момент написания этой статьи (последняя фиксация было два дня назад).

Ответ 5

Это не встроенная функция, и я не знаю стороннего плагина (но, возможно, есть один).

Ответ 6

Вы можете попробовать com.github.nullstress.dependency-analysis градиентный плагин

Сборка script фрагмента для всех версий Gradle:

buildscript {
  repositories {
    jcenter()
  }
  dependencies {
    classpath "com.github.nullstress:DependencyAnalysisPlugin:1.0.3"
  }
}

apply plugin: "com.github.nullstress.dependency-analysis"

Создание script фрагмента для нового, инкубационного, плагинового механизма, представленного в Gradle 2.1:

plugins {
  id "com.github.nullstress.dependency-analysis" version "1.0.3"
}

Кроме того, есть поток (Есть ли Gradle эквивалент "mvn dependency: analysis" ?) в Gradle форуме об этом.