有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (5) 个答案

  1. # 1 楼答案

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

    In June, 2017, they have released the 4.0.0 version and renamed the root project name "gradle-lint-plugin" to "nebula-lint-plugin". They have also added Android support to unused-dependency.


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

    Gradle Lint Plugin: Full Documentation

    The Gradle Lint plugin is a pluggable and configurable linter tool for identifying and reporting on patterns of misuse or deprecations in Gradle scripts and related files.

    这个插件有各种规则Unused Dependency Rule就是其中之一。它有三个特点

    1. 删除未使用的依赖项
    2. 提升代码直接使用的可传递依赖项 以明确一阶依赖关系
    3. 将依赖项重新定位到“正确”配置

    要应用该规则,请添加:

    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'
    

    定义你想要违反的规则:

    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
    }
    


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

    要应用该规则,请添加:

    gradleLint.rules += 'unused-dependency'
    

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

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

    一,。删除未使用的依赖项

    • 家庭风格的罐子,比如com。amazonaws:aws java sdk被删除,如下所示: 它们不包含任何代码

    二,。将代码直接使用的可传递依赖项升级为显式一阶依赖项

    • 这样做的副作用是分解家庭风格的JAR文件,比如 通用域名格式。amazonaws:aws-java-sdk,将您实际使用的部分 使用,并将其添加为一阶依赖项

    三,。将依赖项重新定位到“正确”配置

    • WebJAR被移动到运行时配置
    • 在META-INF之外不包含任何类内容的JAR文件是 移动到运行时
    • “xerces”、“xercesImpl”、“xml API”应始终为运行时范围
    • 服务提供者(包含META-INF/services的JAR文件)如 如果没有任何可证明的数据,mysql连接器java将被移动到运行时 编译时参考
    • 依赖项将移动到最高的源集配置 可能的例如,“junit”被重新定位到testCompile 在主源集中存在对它的显式依赖(罕见)


    更新:以前的插件

    关于你的信息,我想分享一下以前的插件

    1. Gradle插件查找未使用的依赖项、声明的依赖项和可传递的依赖项是com.github.nullstress.dependency-analysis

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

    N.B: Many of our engineers are being confused about this plugin as they updated only the version number, nothing else.

  2. # 2 楼答案

    在前面的回答中提到的项目似乎已经死了。我使用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. # 3 楼答案

    大多数历史答案上的项目都已过时,但截至2016年5月30日,似乎仍在进行中

  4. # 5 楼答案

    编者按:这个答案已经过时了。请看the top answer

    你可以试试com.github.nullstress.dependency-analysisGradle插件

    在所有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"?