maven 如何在Gradle中查找/删除未使用的依赖项

qyyhg6bp  于 2022-11-22  发布在  Maven
关注(0)|答案(6)|浏览(207)

我想在我的项目中找到未使用的依赖项。Gradle中是否有类似Maven的功能?

8fq7wneg

8fq7wneg1#

更新Kotlin用户:2021年12月17日:检测Kotlin项目中缺失或多余的构建依赖项:版本1.0.9(最新)

我为Kotlin用户添加了2种类型的配置。

  • 使用插件DSL
  • 使用旧版插件应用程序
    使用插件DSL:
plugins {
  id("com.faire.gradle.analyze") version "1.0.9"
}

使用旧版插件应用程序:

buildscript {
  repositories {
    maven {
      url = uri("https://plugins.gradle.org/m2/")
    }
  }
  dependencies {
    classpath("com.faire.gradle:gradle-kotlin-buildozer:1.0.9")
  }
}

apply(plugin = "com.faire.gradle.analyze")

资源链接:

  1. https://plugins.gradle.org/plugin/com.faire.gradle.analyze
  2. https://github.com/Faire/gradle-kotlin-buildozer
  3. https://discuss.gradle.org/t/detecting-unused-projects-dependencies/25522

更新日期:2016年6月28日:Android对未使用依赖项的支持

    • 2017年6月**,他们发布了4.0.0 version,并将根项目名称"gradle-lint-plugin"重命名为"nebula-lint-plugin"。他们还将Android支持添加到unused-dependency

2016年5月Gradle实施了Gradle lint plugin,用于查找和移除不需要的依赖项
第1001章:
Gradle Lint插件是一款可插拔且可配置的linter工具,用于识别和报告Gradle脚本和相关文件中的误用或弃用模式。
这个插件有各种各样的规则。Unused Dependency Rule是其中之一。它有三个具体的特点。
1.移除未使用的相依性。
1.将代码直接使用的可传递依赖项提升为显式一阶依赖项。
1.将依赖关系重新定位到“正确”配置。
要应用规则,请添加:

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
}

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

要应用规则,请添加:

gradleLint.rules += 'unused-dependency'

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

具体来说,该规则对依赖关系进行以下调整:

1.删除未使用的依赖项

  • 像com.amazonaws:aws-java-sdk这样的家族风格的jar文件被删除了,因为它们不包含任何代码

2.将代码直接使用的可传递依赖项提升为显式一阶依赖项

  • 这样做的副作用是将家族样式的JAR文件(如com.amazonaws:aws-java-sdk)分解为实际使用的部分,并将这些部分作为一阶依赖项添加

3.将依赖关系重新定位到“正确”配置

  • Webjar被移动到运行时配置中
  • 不包含META-INF之外的任何类 * 和 * 内容的JAR文件将移动到运行时
  • 'xerces'、'xercesImpl'、'xml-apis'应该永远是执行阶段范围
  • 如果不存在任何可证明的编译时引用,则像mysql-connector-java这样的服务提供程序(包含META-INF/服务的JAR文件)将被移到运行时
  • 相关性被移到可能的最高源集配置。例如,'junit'被重新定位到testCompile,除非在主源集中有对它的显式相关性(罕见)。

UPDATE:以前的插件

我想和大家分享一下以前的插件
1.用于查找未使用、已声明和可传递依赖项的Gradle插件为com.github.nullstress.dependency-analysis
但是其最新版本1.0.3创建于2014年12月23日。之后没有任何更新。
B:我们的许多工程师对this plugin感到困惑,因为他们只更新了版本号,没有更新其他内容。

umuewwlo

umuewwlo2#

我刚了解到这个:https://plugins.gradle.org/plugin/com.autonomousapps.dependency-analysis
Github
从外观上看,它正在积极发展,但我还没有测试它。
编辑:实际上它非常棒,它提供了很多建议(eidogg.是否使用API与实现)

aamkag61

aamkag613#

前面的答案中提到的项目似乎已经死了。我使用gradle-dependency-analyze。安装很简单:

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

apply plugin: 'ca.cutterslade.analyze'

然后执行以下操作:

$ gradle analyzeDependencies
wrrgggsh

wrrgggsh4#

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

如果有未使用的依赖项,您将得到一个构建失败,显示类似于下面文本的输出,以及一个未使用依赖项的列表(声明的和可传递的)。如果您想通过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
ecr0jaav

ecr0jaav5#

  • 编者注:此答案已过期。请查看顶部的答案。*

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

构建可在所有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"?)。

3pvhb19x

3pvhb19x6#

大多数历史答案上的项目都死了,但gradle-dependency-analyze似乎在2016-05-30还活着。

相关问题