当前位置: 首页 > 知识库问答 >
问题:

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

松琦
2023-03-14

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

共有3个答案

汪典
2023-03-14

我刚刚了解到这一点:https://plugins.gradle.org/plugin/com.autonomousapps.dependency-analysis

github

从外观上看,它正在积极开发中,但我还没有测试它。

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

韦望
2023-03-14

在前面的回答中提到的项目似乎已经死了。我使用gradle依赖性分析。设置很简单:

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

apply plugin: 'ca.cutterslade.analyze'

然后做:

$ gradle analyzeDependencies
拓拔曦
2023-03-14

2017年6月,他们发布了4.0.0版本,并将根项目名称“gradle lint plugin”重命名为“nebula lint plugin”。他们还向未使用的依赖项添加了Android支持。

2016年5月,Gradle实现了Gradle lint插件,用于查找和删除不需要的依赖项

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

这个插件有各种规则。未使用的依赖项规则就是其中之一。它有三个特点。

  1. 删除未使用的依赖项。
  2. 将代码直接使用的传递依赖项提升为显式的一阶依赖项。
  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

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

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

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

要应用该规则,请添加:

gradleLint.rules += 'unused-dependency'

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

  • 家庭风格的罐子,比如com。amazonaws:aws java sdk被删除,因为它们不包含任何代码
  • 这有一个副作用,那就是将家族风格的JAR文件,如com.amazonaws: AWS-java-sdk,分解成您实际使用的部分,并将其添加为一阶依赖关系
  • Webjar被移动到运行时配置
  • 不包含META-INF之外的任何类和内容的JAR文件将移动到运行时
  • “xerces”、“xercesImpl”、“xml API”应始终是运行时范围的
  • 如果没有任何可证明的编译时引用,像mysql connector java这样的服务提供者(包含META-INF/services的JAR文件)将被移动到运行时
  • 依赖项将移动到可能的最高源集配置。例如,“junit”被重新定位到testCompile,除非在主源代码集中存在对它的显式依赖(罕见)

为了您的信息,我想分享一下以前的插件

  1. 查找未使用的依赖项、声明的依赖项和可传递的Gradle插件是com.github.零压力。依赖性分析

但其最新版本1.0.3于2014年12月23日发布。之后就没有任何更新了。

注:我们的许多工程师对这个插件感到困惑,因为他们只更新了版本号,没有更新其他内容。

 类似资料:
  • 我正在更新一大组遗留java应用程序。当前构建使用ant,其依赖项来自每个项目的lib目录。依赖项是每个项目的一部分,并签入源代码管理。更新的目的是将构建转换为gradle,并使用maven存储库进行依赖关系管理。为了简单起见,遗留构建使用ant构造从其他项目的lib目录复制依赖项,如下所示: 这种方法用于编译和运行时依赖项。虽然这样做有效,但由于包含了许多在运行时不需要的JAR,因此会导致部署工

  • 我在构建项目时收到以下错误: 据我所知,这是因为我有多个依赖于slf4j的库。我的构建中的依赖项。gradle文件是: 我知道logback-android-经典依赖是个问题,因为它确实依赖于slf4j,如果我把它注释掉,我的项目构建很好。根据其他消息来源,我发现这通常通过排除传递依赖来解决,如下所示: 然而,即使在我清理和重建后,我仍然得到了错误。 更新:运行dependencyInsight查

  • 我是使用gradle构建的新手。目前,我尝试实现项目B的构建,该构建使用项目a的构建结果,该结果部署到artifactory。我使用的是Gradle 2.2。详细信息: 项目A的build.gradle包含: 每次构建项目a时,应用插件“maven”会在artifatory中生成一个新的工件,如at.mic.projectA-1.0.0-20150624.073846-2.jar(和.pom)。

  • 我已经在gradle文件中添加了依赖项,但仍然无法识别jar文件的类。 我得到错误-不能解决类在这里 我已经提到了以下几点 Android Studio缺少外部依赖项 Android Studio坚持使用“Gradle:resolve Dependencies'_debugCompile'”或“detachedConfiguration1” 如何添加本地. jar文件依赖build.gradle文

  • 我在Glassfish上部署了一个由Maven管理的Java项目。 我的问题是,如何安全地删除可能是运行时依赖项的maven管理的依赖项? 我使用maven依赖插件来识别遗留项目上未使用的依赖项: 输出如下: 我想删除这些“未使用”的依赖项,但我担心应用程序在运行时失败。 我启用的忽略非编译选项promise“忽略运行时/提供/测试/系统范围以进行未使用的依赖项分析”,但据我所知,设置依赖项的范围