如何查找\删除gradle中的未使用的依赖关系
我想在我的项目中find未使用的依赖项。 Gradle中有没有像Maven一样的特性?
更新:28-06-2016:Android支持未使用的依赖
2017年6月 ,他们发布了
4.0.0 version
,并将根项目名称"gradle-lint-plugin"
更名为"nebula-lint-plugin"
。 他们还将Android支持添加到未使用的依赖项中 。
在2016年5月, Gradle已经实现了gradle lint插件来查找和删除不需要的依赖
Gradle Lint插件:完整文档
Gradle Lint插件是一个可插入和可configuration的短信工具,用于识别和报告Gradle脚本和相关文件中滥用或弃用的模式。
这个插件有各种规则。 未使用的依赖规则就是其中之一。 它有三个具体的特点。
- 删除未使用的依赖关系。
- 促进由代码直接使用的传递依赖到显式的一阶依赖。
- 将依赖关系重新定位到“正确”configuration。
要应用规则,请添加:
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
对于企业构build,我们build议在init.gradle脚本或通过Gradle apply from机制包含的gradle脚本中定义lint规则。
对于多模块项目,我们build议将该插件应用于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这样的家族风格的jar被删除,因为它们不包含任何代码
2)促进由代码直接使用的传递依赖到显式的一阶依赖
- 这有一个副作用,把com.amazonaws:aws-java-sdk这样的家庭风格的jar分解成你实际使用的部分,然后把它们作为一阶依赖
3)将依赖关系重新定位到“正确”configuration
- Webjars被移动到运行时configuration
- 不包含META-INF之外的类和内容的Jars被移动到运行时
- 'xerces','xercesImpl','xml-apis'应该总是在运行时范围内
- 如果没有可certificate的编译时引用,那么像mysql-connector-java这样的服务提供者(包含META-INF /服务的jar)将被移动到运行时
- 依赖关系被移至可能的最高源集configuration。 例如,'junit'被重定位到testCompile,除非在主源集合(罕见)中存在明确的依赖关系。
更新:以前的插件
为了您的信息,我想分享一下以前的插件
- 发现未使用的依赖关系,声明和传递的Gradle插件是com.github.nullstress.dependency-analysis
但最新版本1.0.3是2014年12月23日创build的 。 之后,没有更新。
注意:我们的许多工程师对这个插件感到困惑,因为他们只更新了版本号。
在早些时候的答案中提到的项目似乎已经死了。 我使用gradle依赖分析 。 安装很简单:
buildscript { repositories { jcenter() } dependencies { classpath 'ca.cutterslade.gradle:gradle-dependency-analyze:1.0.3' } } apply plugin: 'ca.cutterslade.analyze'
然后做:
$ gradle analyzeDependencies
使用Gradle依赖分析插件我有很多运气。 要开始使用它,请将以下两项内容添加到您的Gradle构build脚本中。
buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "com.github.nullstress:DependencyAnalysisPlugin:1.0.3" } }
和
apply plugin: "dependencyAnalysis"
一旦到位,运行gradle analyze
。 如果存在未使用的依赖关系,则会显示构build失败,显示类似于以下文本的输出,以及未使用的依赖项(声明和传递)的列表。 如果你想强制通过CI构build应该没有未使用的依赖关系,构build失败是非常方便的。
:foo:analyze FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':foo:analyze'. > The project has unused declared artifacts
大部分历史答案的项目都是死的,但是在写这篇文章时(最近一次提交是在两天前), 依赖于分析的分析似乎还活着。
这不是一个内置的function,我不知道第三方插件(但也许有一个)。
你可以试试com.github.nullstress.dependency-analysis gragle插件
构build用于所有Gradle版本的脚本片段:
buildscript { repositories { jcenter() } dependencies { classpath "com.github.nullstress:DependencyAnalysisPlugin:1.0.3" } } apply plugin: "com.github.nullstress.dependency-analysis"
为Gradle 2.1中引入的新的孵化插件机制构build脚本片段:
plugins { id "com.github.nullstress.dependency-analysis" version "1.0.3" }
另外,在gradle论坛中有一个线程( 是否有一个Gradle等价于“mvn dependency:analyze”? )。