Plugins 如何在gradle任务中获取可传递依赖项的信息?

Plugins 如何在gradle任务中获取可传递依赖项的信息?,plugins,gradle,dependencies,task,transitive-dependency,Plugins,Gradle,Dependencies,Task,Transitive Dependency,我想获得gradle任务中所有依赖项(包括可传递的依赖项)的信息 我试过密码: class MyGradlePlugin implements Plugin<Project> { void apply(Project project) { project.afterEvaluate { println " Project:" + project.name project.configurations.each { conf ->

我想获得gradle任务中所有依赖项(包括可传递的依赖项)的信息

我试过密码:

class MyGradlePlugin implements Plugin<Project> {

  void apply(Project project) {
    project.afterEvaluate {
      println "  Project:" + project.name
      project.configurations.each { conf ->
        println "    Configuration: ${conf.name}"
        conf.allDependencies.each { dep ->
          println "      ${dep.group}:${dep.name}:${dep.version}"
        }
      }
    }
  }

}
它只打印这3个依赖项,但不显示
org.hamcrest:hamcrest core:1.3
,它是
junit:junit:4.11
的可传递依赖项

如何修改代码,使其同时显示
org.hamcrest:hamcrest核心:1.3


PS:我知道
gradle dependencies
任务将显示我想要的一切,但我需要手动获取依赖项信息,并以我自己的格式打印出来。

最后,我用follow任务解决了这个问题

class Dep {
String group
String name
String version
String extention
String classifier

Dep(String group, String name, String version, String extension, String classifier) {
    this.group = group
    this.name = name
    this.version = version
    this.extention = extension
    this.classifier = classifier
}
}

任务集合deps{

def deps = []
configurations.each {
    conf ->
        if (conf.isCanBeResolved()) {
            conf.getResolvedConfiguration().getResolvedArtifacts().each {
                at ->
                    def dep = at.getModuleVersion().getId()
                    println at.getFile().getAbsolutePath()
                    //          dep = dep1.getComponentIdentifier()
                    println "$dep.group:$dep.name:$dep.version"
                    deps.add(new Dep(dep.group, dep.name, dep.version, at.extension, at.classifier))
            }
        }
}


def json = groovy.json.JsonOutput.toJson(deps)
json = groovy.json.JsonOutput.prettyPrint(json)

new File("deps.json") << json
def deps=[]
配置。每个{
形态->
if(conf.isCanBeResolved()){
conf.getResolvedConfiguration().getResolvedArtifacts().each{
在->
def dep=at.getModuleVersion().getId()
println位于.getFile().getAbsolutePath()处
//dep=dep1.getComponentIdentifier()
println“$dep.group:$dep.name:$dep.version”
deps.add(新Dep(Dep.group、Dep.name、Dep.version、at.extension、at.classifier))
}
}
}
def json=groovy.json.JsonOutput.toJson(deps)
json=groovy.json.JsonOutput.prettyPrint(json)
新文件(“deps.json”)AndroidStudio 3.5

classpath 'com.android.tools.build:gradle:3.5.0'
  • 创建一个演示android应用程序

  • 在build.gradle添加代码

  • 端子:./gradlew显示所有依赖项调试

    //任务名称:showAllDependencies[Flavor][BuildType]

  • 结果显示所有sdk信息,
    包括以下导入的内容:'implementation fileTree(dir'libs',include:['.jar','.aar'])

    结果是:

    sodino Macbook-pro: MyApplication  sodino$: ./gradlew showAllDependenciesDebug
    
    > Configure project :app
    
    > Task :app:showAllDependenciesDebug
    Debug all dependencies.size=65
    0 -> /Users/sodino/AndroidStudioProjects/MyApplication3/app/libs/sodino.xiamen.FJ.aar
    1 : org.jetbrains.kotlin:kotlin-android-extensions-runtime:1.3.41
    2 : org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.41
    3 : androidx.navigation:navigation-ui-ktx:2.1.0
    4 : androidx.navigation:navigation-ui:2.1.0
    5 : com.google.android.material:material:1.0.0
    6 : androidx.appcompat:appcompat:1.1.0
    7 : androidx.core:core-ktx:1.1.0
    8 : androidx.legacy:legacy-support-v4:1.0.0
    9 : androidx.constraintlayout:constraintlayout:1.1.3
    10 : androidx.navigation:navigation-fragment-ktx:2.1.0
    11 : androidx.navigation:navigation-fragment:2.1.0
    12 : androidx.lifecycle:lifecycle-extensions:2.1.0
    13 : androidx.navigation:navigation-runtime-ktx:2.1.0
    14 : androidx.fragment:fragment-ktx:1.1.0
    15 : androidx.activity:activity-ktx:1.0.0
    16 : androidx.lifecycle:lifecycle-viewmodel-ktx:2.1.0
    17 : androidx.navigation:navigation-common-ktx:2.1.0
    18 : org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1
    19 : org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1
    20 : org.jetbrains.kotlin:kotlin-stdlib:1.3.41
    21 : androidx.fragment:fragment:1.1.0
    22 : androidx.appcompat:appcompat-resources:1.1.0
    23 : androidx.recyclerview:recyclerview:1.0.0
    24 : androidx.legacy:legacy-support-core-ui:1.0.0
    25 : androidx.drawerlayout:drawerlayout:1.0.0
    26 : androidx.media:media:1.0.0
    27 : androidx.legacy:legacy-support-core-utils:1.0.0
    28 : androidx.transition:transition:1.0.1
    29 : androidx.viewpager:viewpager:1.0.0
    30 : androidx.loader:loader:1.0.0
    31 : androidx.navigation:navigation-runtime:2.1.0
    32 : androidx.activity:activity:1.0.0
    33 : androidx.vectordrawable:vectordrawable-animated:1.1.0
    34 : androidx.vectordrawable:vectordrawable:1.1.0
    35 : androidx.coordinatorlayout:coordinatorlayout:1.0.0
    36 : androidx.slidingpanelayout:slidingpanelayout:1.0.0
    37 : androidx.customview:customview:1.0.0
    38 : androidx.swiperefreshlayout:swiperefreshlayout:1.0.0
    39 : androidx.asynclayoutinflater:asynclayoutinflater:1.0.0
    40 : androidx.navigation:navigation-common:2.1.0
    41 : androidx.core:core:1.1.0
    42 : androidx.cursoradapter:cursoradapter:1.0.0
    43 : androidx.cardview:cardview:1.0.0
    44 : androidx.lifecycle:lifecycle-process:2.1.0
    45 : androidx.lifecycle:lifecycle-service:2.1.0
    46 : androidx.lifecycle:lifecycle-runtime:2.1.0
    47 : androidx.lifecycle:lifecycle-livedata:2.1.0
    48 : androidx.lifecycle:lifecycle-livedata-core:2.1.0
    49 : androidx.arch.core:core-runtime:2.1.0
    50 : androidx.savedstate:savedstate:1.0.0
    51 : androidx.arch.core:core-common:2.1.0
    52 : androidx.lifecycle:lifecycle-common:2.1.0
    53 : androidx.lifecycle:lifecycle-viewmodel:2.1.0
    54 : androidx.versionedparcelable:versionedparcelable:1.1.0
    55 : androidx.collection:collection:1.1.0
    56 : androidx.documentfile:documentfile:1.0.0
    57 : androidx.localbroadcastmanager:localbroadcastmanager:1.0.0
    58 : androidx.print:print:1.0.0
    59 : androidx.interpolator:interpolator:1.0.0
    60 : androidx.annotation:annotation:1.1.0
    61 : androidx.constraintlayout:constraintlayout-solver:1.1.3
    62 : org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.1.1
    63 : org.jetbrains.kotlin:kotlin-stdlib-common:1.3.41
    64 : org.jetbrains:annotations:13.0
    
    BUILD SUCCESSFUL in 0s
    

    这是一篇老文章,但我认为值得展示如何在单级/多级项目中做到这一点:

    如果不想与Gradle服务器共享敏感信息,可以使用Gradle扫描或使用内置的dependencyReport任务

    在单个项目中,您可以直接使用:

    ./gradlew dependencyReport
    
    在多个项目中,可以对每个子项目使用相同的调用:

    allprojects {
       ...
       tasks.register("allDeps",DependencyReportTask) {}
       ...
    }
    

    您需要解析依赖项,例如,
    project.configurations.detachedConfiguration(deps as Dependency[])。resolvedConfiguration
    。请参阅。在较新版本的Gradle(如
    6.3
    )中,
    getResolvedConfiguration
    似乎已被删除。我不确定是否有直接替换。
    ./gradlew dependencyReport
    
    allprojects {
       ...
       tasks.register("allDeps",DependencyReportTask) {}
       ...
    }