如何在gradle中找到\删除未使用的依赖项

时间:2013-10-15 10:57:41

标签: java maven gradle dependency-management

我想在我的项目中找到未使用的依赖项。在maven中是否有像graven这样的功能?

7 个答案:

答案 0 :(得分:57)

更新:28-06-2016:Android对未使用依赖的支持

  

2017年6月中,他们发布了String sp = "";   并将根项目名称4.0.0 version重命名为   "gradle-lint-plugin"。他们还添加了 Android支持   未使用的依赖性

2016年5月 Gradle已实施gradle lint plugin以查找和删除不需要的依赖项

Gradle Lint Plugin: Full Documentation

  

Gradle Lint插件是一个可插入且可配置的linter工具   识别和报告中的滥用或弃用模式   Gradle脚本和相关文件。

此插件有各种规则。 Unused Dependency Rule就是其中之一。它有3个特定的特征。

  1. 删除未使用的依赖项。
  2. 提升代码直接使用的传递依赖关系 明确的第一顺序依赖。
  3. 将依赖关系重新定位到'更正'配置。
  4. 要应用规则,请添加:

    "nebula-lint-plugin"

    最后一部分给出了Unused Dependency Rule的详细信息。

    要应用gradle lint插件:

    gradleLint.rules += 'unused-dependency'
    

    <强>可替换地:

    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'
    

    对于企业版本,我们建议在init.gradle脚本或通过Gradle apply from mechanism包含的gradle脚本中定义lint规则。

    对于多模块项目,我们建议在allprojects块中应用插件:

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

    本部分给出了Unused Dependency Rule的详细信息

    要应用规则,请添加:

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

    该规则检查从您的项目source sets发出的已编译二进制文件,以查找类引用,并将这些引用与您在dependencies块中声明的依赖项进行匹配。

    具体而言,该规则对依赖项进行以下调整:

    1)删除未使用的依赖项

    • 像com.amazonaws这样的家庭式罐子:aws-java-sdk被删除了 它们不包含代码

    2)将代码直接使用的传递依赖项提升为显式的第一顺序依赖项

    • 这有破坏家庭式罐子的副作用 com.amazonaws:aws-java-sdk进入你实际的部分 使用,并将它们作为一阶依赖项添加

    3)将依赖项重新定位到&#39;更正&#39;构造

    • 将Webjars移至运行时配置
    • 不包含META-INF以外的类和内容的罐子 移动到运行时
    • &#39; xerces&#39;,&#39; xercesImpl&#39;,&#39; xml-apis&#39;应该始终是运行时作用域
    • 服务提供商(包含META-INF /服务的罐子) 如果没有可证明的话,mysql-connector-java被移动到运行时 编译时参考
    • 依赖关系将移至最高源设置配置 可能。例如,&#39; junit&#39;除非是重定位到testCompile 主源集中存在明显的依赖关系(罕见)。

    更新:以前的插件

    有关您的善意信息,我想分享以前的插件

    1. 发现未使用的依赖项,声明和传递的Gradle插件是com.github.nullstress.dependency-analysis
    2. 它的最新版本1.0.3创建于2014年12月23日。之后没有更新。

        

      N.B:我们的许多工程师都对this plugin感到困惑   只更新了版本号。

答案 1 :(得分:8)

我使用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

答案 2 :(得分:7)

早期答案中提到的项目似乎已经死了。我使用gradle-dependency-analyze。设置很简单:

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

apply plugin: 'ca.cutterslade.analyze'

然后做:

$ gradle analyzeDependencies

答案 3 :(得分:4)

我刚刚了解了以下内容:https://plugins.gradle.org/plugin/com.autonomousapps.dependency-analysis

Github

从外观上看,它正在积极开发中,但我尚未对其进行测试。

编辑: 实际上,它非常棒,它提供了很多建议(例如,是否使用api和实现)

答案 4 :(得分:1)

编辑注:此答案已过期,请参阅最佳答案。

您可以尝试使用com.github.nullstress.dependency-analysis gragle插件

构建脚本代码段,以便在所有Gradle版本中使用:

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

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

为Gradle 2.1中引入的新的孵化,插件机制构建脚本片段:

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

此外,在gradle论坛中有一个关于此的帖子(Is there a Gradle equivalent of "mvn dependency:analyze"?)。

答案 5 :(得分:1)

大多数历史答案的项目都已失效,但在撰写本文时gradle-dependency-analyze似乎还活着(最后一次提交是两天前)。

答案 6 :(得分:0)

这个 Gradle 插件是全新的,应该可以很好地工作。它支持 Kotlin DSL,并且应该同时支持 Java 和 Kotlin 项目

https://github.com/Faire/gradle-kotlin-buildozer