Я хотел найти неиспользуемые зависимости в моем проекте. Есть ли функция для этого в gradle как в maven?
Как найти\удалить неиспользуемые зависимости в gradle
Ответ 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, если существует явная зависимость от него в основном наборе источников (редко).
ОБНОВЛЕНИЕ: Предыдущие плагины
Для вашей любезной информации я хочу поделиться с предыдущими плагинами
- gradle плагин, который находит неиспользуемые зависимости, объявленный и транзитивный com.github.nullstress.dependency-analysis
Но последняя версия 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 форуме об этом.