有没有办法以编程方式列出所有gradle依赖项? [英] Is there a way to list all gradle dependencies programmatically?

查看:111
本文介绍了有没有办法以编程方式列出所有gradle依赖项?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道这样做:

gradle dependencies

列出完整的依赖树。现在,我正在寻找一种以编程方式操纵该依赖关系树的方法,以便我可以使用JSON打印相同的层次结构,而不是gradle cli现在在控制台中使用的格式。

Lists the full dependency tree. Now, I'm looking for a way to manipulate that dependencies tree programmatically so that I can print the same hierarchy but in JSON instead of the format the gradle cli uses right now in the console.

我应该使用哪些常规类?

Which are the groovy classes I should use to achieve that?

编辑

我想获取(以JSON格式)这样的内容:

I would like to obtain (in JSON) some like this:

"dependencies" : [
  {
    "groupId" : "com.something",
    "artifactId" : "somethingArtifact",
    "version" : "1.0",
    "dependencies" : [
      "groupId" : "com.leaf",
      "artifactId" : "standaloneArtifact",
      "version" : "2.0",
    ]
  },
  {
    "groupId" : "com.leaf",
    "artifactId" : "anotherStandaloneArtifact",
    "version" : "1.0",
    "dependencies" : []
  }
]

如您所见,我知道依赖取决于其他依赖者

As you can see here with this I know which dependency depends on which other dependencies transitively.

推荐答案

所有这些就是我最终将需要的文件存档的原因,希望对其他人有用。

Hi all this is how I ended up archiving what I needed and hopefully will be useful for the rest of you.

首先,我要感谢 pczeus和BjörnKautler的回答,这有助于我获得此解决方案。

First off I would like to thanks "pczeus" and "Björn Kautler" for their answers which helped me get to this solution.

因此,这就是我解决问题的方式:

So, this is how I solved my problem:

给出此build.gradle:

Given this build.gradle:


apply plugin:'java'

repositories {
    jcenter()
}

dependencies {
    compile 'org.javassist:javassist:3.13.0-GA'
    compile 'org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1.1'
    compile 'org.hibernate:hibernate-core:5.1.0.Final'
    compile 'org.springframework:spring-web:4.2.5.RELEASE'
}

如果您这样做:


gradle -b build.gradle dependencies --configuration=compile

您将在控制台中获得以下输出:

You'll get this output in the console:


:dependencies

------------------------------------------------------------
Root project
------------------------------------------------------------

compile - Compile classpath for source set 'main'.
+--- org.javassist:javassist:3.13.0-GA -> 3.20.0-GA
+--- org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1.1
+--- org.hibernate:hibernate-core:5.1.0.Final
|    +--- org.jboss.logging:jboss-logging:3.3.0.Final
|    +--- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final
|    +--- org.javassist:javassist:3.20.0-GA
|    +--- antlr:antlr:2.7.7
|    +--- org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1.1
|    +--- org.jboss:jandex:2.0.0.Final
|    +--- com.fasterxml:classmate:1.3.0
|    +--- dom4j:dom4j:1.6.1
|    |    \--- xml-apis:xml-apis:1.0.b2
|    \--- org.hibernate.common:hibernate-commons-annotations:5.0.1.Final
|         \--- org.jboss.logging:jboss-logging:3.3.0.Final
\--- org.springframework:spring-web:4.2.5.RELEASE
     +--- org.springframework:spring-aop:4.2.5.RELEASE
     |    +--- aopalliance:aopalliance:1.0
     |    +--- org.springframework:spring-beans:4.2.5.RELEASE
     |    |    \--- org.springframework:spring-core:4.2.5.RELEASE
     |    |         \--- commons-logging:commons-logging:1.2
     |    \--- org.springframework:spring-core:4.2.5.RELEASE (*)
     +--- org.springframework:spring-beans:4.2.5.RELEASE (*)
     +--- org.springframework:spring-context:4.2.5.RELEASE
     |    +--- org.springframework:spring-aop:4.2.5.RELEASE (*)
     |    +--- org.springframework:spring-beans:4.2.5.RELEASE (*)
     |    +--- org.springframework:spring-core:4.2.5.RELEASE (*)
     |    \--- org.springframework:spring-expression:4.2.5.RELEASE
     |         \--- org.springframework:spring-core:4.2.5.RELEASE (*)
     \--- org.springframework:spring-core:4.2.5.RELEASE (*)

(*) - dependencies omitted (listed previously)

我想要获得的是相同的依赖关系树,但是JSON格式。因此,这就是我为此创建的任务:

What I wanted was to obtained a the same "dependency tree" but in JSON format. So this is the "task" I created for doing that:



task printSolvedDepsTreeInJson {
  doLast {
    def jsonOutput = "["
    configurations.compile.resolvedConfiguration.firstLevelModuleDependencies.each { dep ->
      def addToJson 
      addToJson = { resolvedDep -> 
        jsonOutput += "\n{"
        jsonOutput += "\"groupId\":\"${resolvedDep.module.id.group}\",\"artifactId\":\"${resolvedDep.module.id.name}\",\"version\":\"${resolvedDep.module.id.version}\",\"file\":\"${resolvedDep.getModuleArtifacts()[0].file}\""
        jsonOutput += ",\"dependencies\":["
        if(resolvedDep.children.size()!=0){
          resolvedDep.children.each { childResolvedDep ->
            if(resolvedDep in childResolvedDep.getParents() && childResolvedDep.getConfiguration() == 'compile'){
              addToJson(childResolvedDep)
            }
          }
          if(jsonOutput[-1] == ','){
            jsonOutput = jsonOutput[0..-2]
          }
        }
        jsonOutput += "]},"
      }
      addToJson(dep)
    }
    if(jsonOutput[-1] == ','){
      jsonOutput = jsonOutput[0..-2]
    }
    jsonOutput += "]"
    println jsonOutput
  }
}

运行此任务:


gradle -b build.gradle printSolvedDepsTreeInJson

您将获得:


[
  {
    "groupId": "org.apache.geronimo.specs",
    "artifactId": "geronimo-jta_1.1_spec",
    "version": "1.1.1",
    "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.apache.geronimo.specs/geronimo-jta_1.1_spec/1.1.1/aabab3165b8ea936b9360abbf448459c0d04a5a4/geronimo-jta_1.1_spec-1.1.1.jar",
    "dependencies": []
  },
  {
    "groupId": "org.hibernate",
    "artifactId": "hibernate-core",
    "version": "5.1.0.Final",
    "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.hibernate/hibernate-core/5.1.0.Final/1b5ac619df76cfd67222ca7cddcee6b0a5db8d0c/hibernate-core-5.1.0.Final.jar",
    "dependencies": [
      {
        "groupId": "org.jboss.logging",
        "artifactId": "jboss-logging",
        "version": "3.3.0.Final",
        "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.jboss.logging/jboss-logging/3.3.0.Final/3616bb87707910296e2c195dc016287080bba5af/jboss-logging-3.3.0.Final.jar",
        "dependencies": []
      },
      {
        "groupId": "org.hibernate.javax.persistence",
        "artifactId": "hibernate-jpa-2.1-api",
        "version": "1.0.0.Final",
        "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.hibernate.javax.persistence/hibernate-jpa-2.1-api/1.0.0.Final/5e731d961297e5a07290bfaf3db1fbc8bbbf405a/hibernate-jpa-2.1-api-1.0.0.Final.jar",
        "dependencies": []
      },
      {
        "groupId": "antlr",
        "artifactId": "antlr",
        "version": "2.7.7",
        "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/antlr/antlr/2.7.7/83cd2cd674a217ade95a4bb83a8a14f351f48bd0/antlr-2.7.7.jar",
        "dependencies": []
      },
      {
        "groupId": "org.apache.geronimo.specs",
        "artifactId": "geronimo-jta_1.1_spec",
        "version": "1.1.1",
        "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.apache.geronimo.specs/geronimo-jta_1.1_spec/1.1.1/aabab3165b8ea936b9360abbf448459c0d04a5a4/geronimo-jta_1.1_spec-1.1.1.jar",
        "dependencies": []
      },
      {
        "groupId": "org.jboss",
        "artifactId": "jandex",
        "version": "2.0.0.Final",
        "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.jboss/jandex/2.0.0.Final/3e899258936f94649c777193e1be846387ed54b3/jandex-2.0.0.Final.jar",
        "dependencies": []
      },
      {
        "groupId": "com.fasterxml",
        "artifactId": "classmate",
        "version": "1.3.0",
        "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/com.fasterxml/classmate/1.3.0/183407ff982e9375f1a1c4a51ed0a9307c598fc7/classmate-1.3.0.jar",
        "dependencies": []
      },
      {
        "groupId": "dom4j",
        "artifactId": "dom4j",
        "version": "1.6.1",
        "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/dom4j/dom4j/1.6.1/5d3ccc056b6f056dbf0dddfdf43894b9065a8f94/dom4j-1.6.1.jar",
        "dependencies": [
          {
            "groupId": "xml-apis",
            "artifactId": "xml-apis",
            "version": "1.0.b2",
            "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/xml-apis/xml-apis/1.0.b2/3136ca936f64c9d68529f048c2618bd356bf85c9/xml-apis-1.0.b2.jar",
            "dependencies": []
          }]
      },
      {
        "groupId": "org.hibernate.common",
        "artifactId": "hibernate-commons-annotations",
        "version": "5.0.1.Final",
        "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.hibernate.common/hibernate-commons-annotations/5.0.1.Final/71e1cff3fcb20d3b3af4f3363c3ddb24d33c6879/hibernate-commons-annotations-5.0.1.Final.jar",
        "dependencies": [
          {
            "groupId": "org.jboss.logging",
            "artifactId": "jboss-logging",
            "version": "3.3.0.Final",
            "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.jboss.logging/jboss-logging/3.3.0.Final/3616bb87707910296e2c195dc016287080bba5af/jboss-logging-3.3.0.Final.jar",
            "dependencies": []
          }]
      },
      {
        "groupId": "org.javassist",
        "artifactId": "javassist",
        "version": "3.20.0-GA",
        "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.javassist/javassist/3.20.0-GA/a9cbcdfb7e9f86fbc74d3afae65f2248bfbf82a0/javassist-3.20.0-GA.jar",
        "dependencies": []
      }]
  },
  {
    "groupId": "org.springframework",
    "artifactId": "spring-web",
    "version": "4.2.5.RELEASE",
    "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.springframework/spring-web/4.2.5.RELEASE/49cd2430884b77172aa81e3fc33ef668ea1dab30/spring-web-4.2.5.RELEASE.jar",
    "dependencies": [
      {
        "groupId": "org.springframework",
        "artifactId": "spring-aop",
        "version": "4.2.5.RELEASE",
        "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.springframework/spring-aop/4.2.5.RELEASE/858d6c70909b3ce7e07b59fc936f8ccfcd81c0aa/spring-aop-4.2.5.RELEASE.jar",
        "dependencies": [
          {
            "groupId": "org.springframework",
            "artifactId": "spring-beans",
            "version": "4.2.5.RELEASE",
            "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.springframework/spring-beans/4.2.5.RELEASE/fa992ae40f6fc47117282164e0433b71da385e94/spring-beans-4.2.5.RELEASE.jar",
            "dependencies": [
              {
                "groupId": "org.springframework",
                "artifactId": "spring-core",
                "version": "4.2.5.RELEASE",
                "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.springframework/spring-core/4.2.5.RELEASE/251207b29f0f38f61e3495a2f7fb053cf1bfe8c/spring-core-4.2.5.RELEASE.jar",
                "dependencies": [
                  {
                    "groupId": "commons-logging",
                    "artifactId": "commons-logging",
                    "version": "1.2",
                    "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.2/4bfc12adfe4842bf07b657f0369c4cb522955686/commons-logging-1.2.jar",
                    "dependencies": []
                  }]
              }]
          },
          {
            "groupId": "org.springframework",
            "artifactId": "spring-core",
            "version": "4.2.5.RELEASE",
            "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.springframework/spring-core/4.2.5.RELEASE/251207b29f0f38f61e3495a2f7fb053cf1bfe8c/spring-core-4.2.5.RELEASE.jar",
            "dependencies": [
              {
                "groupId": "commons-logging",
                "artifactId": "commons-logging",
                "version": "1.2",
                "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.2/4bfc12adfe4842bf07b657f0369c4cb522955686/commons-logging-1.2.jar",
                "dependencies": []
              }]
          },
          {
            "groupId": "aopalliance",
            "artifactId": "aopalliance",
            "version": "1.0",
            "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/aopalliance/aopalliance/1.0/235ba8b489512805ac13a8f9ea77a1ca5ebe3e8/aopalliance-1.0.jar",
            "dependencies": []
          }]
      },
      {
        "groupId": "org.springframework",
        "artifactId": "spring-beans",
        "version": "4.2.5.RELEASE",
        "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.springframework/spring-beans/4.2.5.RELEASE/fa992ae40f6fc47117282164e0433b71da385e94/spring-beans-4.2.5.RELEASE.jar",
        "dependencies": [
          {
            "groupId": "org.springframework",
            "artifactId": "spring-core",
            "version": "4.2.5.RELEASE",
            "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.springframework/spring-core/4.2.5.RELEASE/251207b29f0f38f61e3495a2f7fb053cf1bfe8c/spring-core-4.2.5.RELEASE.jar",
            "dependencies": [
              {
                "groupId": "commons-logging",
                "artifactId": "commons-logging",
                "version": "1.2",
                "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.2/4bfc12adfe4842bf07b657f0369c4cb522955686/commons-logging-1.2.jar",
                "dependencies": []
              }]
          }]
      },
      {
        "groupId": "org.springframework",
        "artifactId": "spring-context",
        "version": "4.2.5.RELEASE",
        "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.springframework/spring-context/4.2.5.RELEASE/a75e18322c7b362fe1daa26a245ae672ec0f3138/spring-context-4.2.5.RELEASE.jar",
        "dependencies": [
          {
            "groupId": "org.springframework",
            "artifactId": "spring-aop",
            "version": "4.2.5.RELEASE",
            "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.springframework/spring-aop/4.2.5.RELEASE/858d6c70909b3ce7e07b59fc936f8ccfcd81c0aa/spring-aop-4.2.5.RELEASE.jar",
            "dependencies": [
              {
                "groupId": "org.springframework",
                "artifactId": "spring-beans",
                "version": "4.2.5.RELEASE",
                "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.springframework/spring-beans/4.2.5.RELEASE/fa992ae40f6fc47117282164e0433b71da385e94/spring-beans-4.2.5.RELEASE.jar",
                "dependencies": [
                  {
                    "groupId": "org.springframework",
                    "artifactId": "spring-core",
                    "version": "4.2.5.RELEASE",
                    "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.springframework/spring-core/4.2.5.RELEASE/251207b29f0f38f61e3495a2f7fb053cf1bfe8c/spring-core-4.2.5.RELEASE.jar",
                    "dependencies": [
                      {
                        "groupId": "commons-logging",
                        "artifactId": "commons-logging",
                        "version": "1.2",
                        "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.2/4bfc12adfe4842bf07b657f0369c4cb522955686/commons-logging-1.2.jar",
                        "dependencies": []
                      }]
                  }]
              },
              {
                "groupId": "org.springframework",
                "artifactId": "spring-core",
                "version": "4.2.5.RELEASE",
                "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.springframework/spring-core/4.2.5.RELEASE/251207b29f0f38f61e3495a2f7fb053cf1bfe8c/spring-core-4.2.5.RELEASE.jar",
                "dependencies": [
                  {
                    "groupId": "commons-logging",
                    "artifactId": "commons-logging",
                    "version": "1.2",
                    "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.2/4bfc12adfe4842bf07b657f0369c4cb522955686/commons-logging-1.2.jar",
                    "dependencies": []
                  }]
              },
              {
                "groupId": "aopalliance",
                "artifactId": "aopalliance",
                "version": "1.0",
                "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/aopalliance/aopalliance/1.0/235ba8b489512805ac13a8f9ea77a1ca5ebe3e8/aopalliance-1.0.jar",
                "dependencies": []
              }]
          },
          {
            "groupId": "org.springframework",
            "artifactId": "spring-beans",
            "version": "4.2.5.RELEASE",
            "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.springframework/spring-beans/4.2.5.RELEASE/fa992ae40f6fc47117282164e0433b71da385e94/spring-beans-4.2.5.RELEASE.jar",
            "dependencies": [
              {
                "groupId": "org.springframework",
                "artifactId": "spring-core",
                "version": "4.2.5.RELEASE",
                "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.springframework/spring-core/4.2.5.RELEASE/251207b29f0f38f61e3495a2f7fb053cf1bfe8c/spring-core-4.2.5.RELEASE.jar",
                "dependencies": [
                  {
                    "groupId": "commons-logging",
                    "artifactId": "commons-logging",
                    "version": "1.2",
                    "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.2/4bfc12adfe4842bf07b657f0369c4cb522955686/commons-logging-1.2.jar",
                    "dependencies": []
                  }]
              }]
          },
          {
            "groupId": "org.springframework",
            "artifactId": "spring-core",
            "version": "4.2.5.RELEASE",
            "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.springframework/spring-core/4.2.5.RELEASE/251207b29f0f38f61e3495a2f7fb053cf1bfe8c/spring-core-4.2.5.RELEASE.jar",
            "dependencies": [
              {
                "groupId": "commons-logging",
                "artifactId": "commons-logging",
                "version": "1.2",
                "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.2/4bfc12adfe4842bf07b657f0369c4cb522955686/commons-logging-1.2.jar",
                "dependencies": []
              }]
          },
          {
            "groupId": "org.springframework",
            "artifactId": "spring-expression",
            "version": "4.2.5.RELEASE",
            "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.springframework/spring-expression/4.2.5.RELEASE/a42bdfb833d0be6c18429aea3fb0fba81f85c6e8/spring-expression-4.2.5.RELEASE.jar",
            "dependencies": [
              {
                "groupId": "org.springframework",
                "artifactId": "spring-core",
                "version": "4.2.5.RELEASE",
                "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.springframework/spring-core/4.2.5.RELEASE/251207b29f0f38f61e3495a2f7fb053cf1bfe8c/spring-core-4.2.5.RELEASE.jar",
                "dependencies": [
                  {
                    "groupId": "commons-logging",
                    "artifactId": "commons-logging",
                    "version": "1.2",
                    "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.2/4bfc12adfe4842bf07b657f0369c4cb522955686/commons-logging-1.2.jar",
                    "dependencies": []
                  }]
              }]
          }]
      },
      {
        "groupId": "org.springframework",
        "artifactId": "spring-core",
        "version": "4.2.5.RELEASE",
        "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.springframework/spring-core/4.2.5.RELEASE/251207b29f0f38f61e3495a2f7fb053cf1bfe8c/spring-core-4.2.5.RELEASE.jar",
        "dependencies": [
          {
            "groupId": "commons-logging",
            "artifactId": "commons-logging",
            "version": "1.2",
            "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.2/4bfc12adfe4842bf07b657f0369c4cb522955686/commons-logging-1.2.jar",
            "dependencies": []
          }]
      }]
  }, 
  {
    "groupId": "org.javassist",
    "artifactId": "javassist",
    "version": "3.20.0-GA",
    "file": "/Users/cgadam/.gradle/caches/modules-2/files-2.1/org.javassist/javassist/3.20.0-GA/a9cbcdfb7e9f86fbc74d3afae65f2248bfbf82a0/javassist-3.20.0-GA.jar",
    "dependencies": []
  }
]

我需要的依赖关系树的JSON表示形式。
现在,如果您仔细看,您会发现这不是我们在build.gradle中定义的依赖关系的实际列表。这是RESOLVED依赖关系树。这意味着某些依赖项已更改。

Which is the JSON representation of the dependency tree I needed. Now, if you look closer you'll notice that this is not the actual list of dependencies we defined in the build.gradle. This is the RESOLVED dependency tree. This means that some dependencies have changed.

例如firstLevel依赖项:

For example the firstLevel dependency:


org.javassist:javassist:3.13.0-GA

已更改为:


org.javassist:javassist:3.20.0-GA

As


org.hibernate:hibernate-core:5.1.0.Final

取决于:


org.javassist:javassist:3.20.0-GA

版本高于:


org.javassist:javassist:3.13.0-GA

并且Gradle默认情况下解决冲突算法始终选择最新版本。

And Gradle by-default conflict resolution algorithm chooses always the "latest" version.

实际上就是这样:


+--- org.javassist:javassist:3.13.0-GA -> 3.20.0-GA

表示控制台输出。 3.13.0-GA已被3.20.0-GA版本覆盖。

Means in the console output. 3.13.0-GA was override by 3.20.0-GA version.

现在,这是一个问题,因为我没有得到实际的依赖关系树。我得到了解决的解决方案。

Now, this is a problem because I'm not getting the actual "dependency tree". I'm getting the "resolved" one.

我最终通过定义另一项任务来解决此问题:

I ended up fixing this situation by defining another TASK:


task printDepsTreeInJson {
  doLast {
    configurations.compile.incoming.getResolutionResult().getAllDependencies().each { depResult  ->
      println "{\"from\":\"" + depResult.getFrom() + "\"," + "\"requested\":\"" + depResult.getRequested() + "\"}"
    }
  }
}

如果执行此操作:


gradle -b build.gradle printDepsTreeInJson

您现在将获得此: / p>

You'll now get this:


:printDepsTreeInJson
{"from":"project :","requested":"org.javassist:javassist:3.13.0-GA"}
{"from":"project :","requested":"org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1.1"}
{"from":"project :","requested":"org.hibernate:hibernate-core:5.1.0.Final"}
{"from":"org.hibernate:hibernate-core:5.1.0.Final","requested":"org.jboss.logging:jboss-logging:3.3.0.Final"}
{"from":"org.hibernate:hibernate-core:5.1.0.Final","requested":"org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final"}
{"from":"org.hibernate:hibernate-core:5.1.0.Final","requested":"org.javassist:javassist:3.20.0-GA"}
{"from":"org.hibernate:hibernate-core:5.1.0.Final","requested":"antlr:antlr:2.7.7"}
{"from":"org.hibernate:hibernate-core:5.1.0.Final","requested":"org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1.1"}
{"from":"org.hibernate:hibernate-core:5.1.0.Final","requested":"org.jboss:jandex:2.0.0.Final"}
{"from":"org.hibernate:hibernate-core:5.1.0.Final","requested":"com.fasterxml:classmate:1.3.0"}
{"from":"org.hibernate:hibernate-core:5.1.0.Final","requested":"dom4j:dom4j:1.6.1"}
{"from":"dom4j:dom4j:1.6.1","requested":"xml-apis:xml-apis:1.0.b2"}
{"from":"org.hibernate:hibernate-core:5.1.0.Final","requested":"org.hibernate.common:hibernate-commons-annotations:5.0.1.Final"}
{"from":"org.hibernate.common:hibernate-commons-annotations:5.0.1.Final","requested":"org.jboss.logging:jboss-logging:3.3.0.Final"}
{"from":"project :","requested":"org.springframework:spring-web:4.2.5.RELEASE"}
{"from":"org.springframework:spring-web:4.2.5.RELEASE","requested":"org.springframework:spring-aop:4.2.5.RELEASE"}
{"from":"org.springframework:spring-aop:4.2.5.RELEASE","requested":"aopalliance:aopalliance:1.0"}
{"from":"org.springframework:spring-aop:4.2.5.RELEASE","requested":"org.springframework:spring-beans:4.2.5.RELEASE"}
{"from":"org.springframework:spring-beans:4.2.5.RELEASE","requested":"org.springframework:spring-core:4.2.5.RELEASE"}
{"from":"org.springframework:spring-core:4.2.5.RELEASE","requested":"commons-logging:commons-logging:1.2"}
{"from":"org.springframework:spring-aop:4.2.5.RELEASE","requested":"org.springframework:spring-core:4.2.5.RELEASE"}
{"from":"org.springframework:spring-web:4.2.5.RELEASE","requested":"org.springframework:spring-beans:4.2.5.RELEASE"}
{"from":"org.springframework:spring-web:4.2.5.RELEASE","requested":"org.springframework:spring-context:4.2.5.RELEASE"}
{"from":"org.springframework:spring-context:4.2.5.RELEASE","requested":"org.springframework:spring-aop:4.2.5.RELEASE"}
{"from":"org.springframework:spring-context:4.2.5.RELEASE","requested":"org.springframework:spring-beans:4.2.5.RELEASE"}
{"from":"org.springframework:spring-context:4.2.5.RELEASE","requested":"org.springframework:spring-core:4.2.5.RELEASE"}
{"from":"org.springframework:spring-context:4.2.5.RELEASE","requested":"org.springframework:spring-expression:4.2.5.RELEASE"}
{"from":"org.springframework:spring-expression:4.2.5.RELEASE","requested":"org.springframework:spring-core:4.2.5.RELEASE"}
{"from":"org.springframework:spring-web:4.2.5.RELEASE","requested":"org.springframework:spring-core:4.2.5.RELEASE"}

这不是最终的依赖项树(我最终使用Java构建它

This is not the final "dependency tree" (I ended up constructing it using javascript) but it's what you actually need to generate it!

from是请求另一个依赖项的依赖项,而 requested是请求的实际依赖项! :)

The "from" is the dependency that requested another dependency and the "requested" is the actual dependency being requested! :)

如果


"from":"project :"

这意味着依赖性是第一级依赖性。 (root用户)

That means that the dependency is a "first level" dependency. (A root)

所有其他依赖项都将是这样:

All other dependencies will be like this:


{"from":"org.hibernate:hibernate-core:5.1.0.Final","requested":"org.jboss.logging:jboss-logging:3.3.0.Final"}

注意,我确实拥有两个


org.javassist:javassist

每个与实际请求依赖项相关的人。
是一个第一级依赖项:

Each one associated to the dependency that actually requested it. One is a "first level" dependency:


{"from":"project :","requested":"org.javassist:javassist:3.13.0-GA"}

另一个是休眠请求的:


{"from":"org.hibernate:hibernate-core:5.1.0.Final","requested":"org.javassist:javassist:3.20.0-GA"}

我太懒了,无法在同一任务中以JSON生成依赖树:)但是,很明显如果由于某种原因需要解析原始(以前的/未解决的)依赖关系树,这就是方法。

I was too lazy to generate the dependency tree in JSON in the same task :) But, it's clear that this is the way to go if you, for some reason, need to parse the "original"(former/not solved) dependency tree.

这是<如果要复制并粘贴并尝试一下,请strong> final build.gradle文件:


apply plugin:'java'

repositories {
    jcenter()
}

dependencies {
    compile 'org.javassist:javassist:3.13.0-GA'
    compile 'org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1.1'
    compile 'org.hibernate:hibernate-core:5.1.0.Final'
    compile 'org.springframework:spring-web:4.2.5.RELEASE'
}

task printDepsTreeInJson {
  doLast {
    configurations.compile.incoming.getResolutionResult().getAllDependencies().each { depResult  ->
      println "{\"from\":\"" + depResult.getFrom() + "\"," + "\"requested\":\"" + depResult.getRequested() + "\"}"
    }
  }
}

task printSolvedDepsTreeInJson {
  doLast {
    def jsonOutput = "["
    configurations.compile.resolvedConfiguration.firstLevelModuleDependencies.each { dep ->
      def addToJson 
      addToJson = { resolvedDep -> 
        jsonOutput += "\n{"
        jsonOutput += "\"groupId\":\"${resolvedDep.module.id.group}\",\"artifactId\":\"${resolvedDep.module.id.name}\",\"version\":\"${resolvedDep.module.id.version}\",\"file\":\"${resolvedDep.getModuleArtifacts()[0].file}\""
        jsonOutput += ",\"dependencies\":["
        if(resolvedDep.children.size()!=0){
          resolvedDep.children.each { childResolvedDep ->
            if(resolvedDep in childResolvedDep.getParents() && childResolvedDep.getConfiguration() == 'compile'){
              addToJson(childResolvedDep)
            }
          }
          if(jsonOutput[-1] == ','){
            jsonOutput = jsonOutput[0..-2]
          }
        }
        jsonOutput += "]},"
      }
      addToJson(dep)
    }
    if(jsonOutput[-1] == ','){
      jsonOutput = jsonOutput[0..-2]
    }
    jsonOutput += "]"
    println jsonOutput
  }
}

这篇关于有没有办法以编程方式列出所有gradle依赖项?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆