【发布时间】:2013-10-23 03:45:45
【问题描述】:
我想在我的项目中找到未使用的依赖项。 Gradle 中是否有类似 Maven 的功能?
【问题讨论】:
标签: java maven gradle dependency-management
我想在我的项目中找到未使用的依赖项。 Gradle 中是否有类似 Maven 的功能?
【问题讨论】:
标签: java maven gradle dependency-management
我刚刚了解到这个:https://plugins.gradle.org/plugin/com.autonomousapps.dependency-analysis
看起来它正在积极开发中,但我还没有测试过。
编辑: 实际上它非常棒,它提供了很多建议(例如,是否使用 api vs implementation)
【讨论】:
使用Gradle Dependency Analysis Plugin 我很幸运。要开始使用它,请将以下两件事添加到您的 Gradle 构建脚本中。
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
【讨论】:
2017 年 6 月,他们发布了
4.0.0 version并将根项目名称"gradle-lint-plugin"重命名为"nebula-lint-plugin"。他们还添加了 Android 支持 未使用的依赖项。
2016 年 5 月Gradle 实现了Gradle lint plugin 用于查找和删除不需要的依赖项
Gradle Lint 插件是一个可插入且可配置的 linter 工具,用于 识别和报告滥用或弃用模式 Gradle 脚本和相关文件。
这个插件有各种规则。 Unused Dependency Rule 就是其中之一。它具有三个特定的特征。
要应用规则,请添加:
gradleLint.rules += 'unused-dependency'
Unused Dependency Rule的详细信息在最后部分给出。
应用 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'
定义您要针对哪些规则进行 lint:
gradleLint.rules = ['all-dependency'] // Add as many rules here as you'd like
对于企业构建,我们建议在 init.gradle 脚本或通过 Gradle apply from 机制包含的 Gradle 脚本中定义 lint 规则。
对于多模块项目,我们建议在 allprojects 块中应用插件:
allprojects {
apply plugin: 'nebula.lint'
gradleLint.rules = ['all-dependency'] // Add as many rules here as you'd like
}
要应用规则,请添加:
gradleLint.rules += 'unused-dependency'
该规则检查从您项目的source sets 发出的已编译二进制文件以查找类引用并将这些引用与您在dependencies 块中声明的依赖项进行匹配。
为了您的好意,我想分享一下以前的插件
但其最新版本 1.0.3 是在 2014 年 12 月 23 日创建的。之后就没有任何更新了。
N.B:我们的许多工程师都对this plugin 感到困惑,因为他们 只更新版本号,没有别的。
【讨论】:
compile 而不是 implementation 替换其他依赖项。
implementation 和 api),更糟糕的是,建议从新配置更改为已弃用的旧配置(例如:@ 987654345@、testCompile等)。
大多数历史答案上的项目都已死,但截至 2016 年 5 月 30 日,gradle-dependency-analyze 似乎还活着。
【讨论】:
编者注:此答案已过时。请参阅the top answer。
你可以试试com.github.nullstress.dependency-analysis Gradle 插件
构建脚本 sn-p 以用于所有 Gradle 版本:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "com.github.nullstress:DependencyAnalysisPlugin:1.0.3"
}
}
apply plugin: "com.github.nullstress.dependency-analysis"
为 Gradle 2.1 中引入的新的孵化插件机制构建脚本 sn-p:
plugins {
id "com.github.nullstress.dependency-analysis" version "1.0.3"
}
此外,Gradle 论坛中有一个关于此的主题 (Is there a Gradle equivalent of "mvn dependency:analyze"?)。
【讨论】:
前面答案中提到的项目似乎已经死了。我使用gradle-dependency-analyze。设置很简单:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'ca.cutterslade.gradle:gradle-dependency-analyze:1.0.3'
}
}
apply plugin: 'ca.cutterslade.analyze'
然后做:
$ gradle analyzeDependencies
【讨论】: