Is there a way to list all the gradle dependencies programmatically?

I know what to do:

gradle dependencies 

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

Does anyone know which groovy classes I should use for this?

EDITED

I would like to get (in JSON) several of these:

 "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, I know which dependency depends on which other dependencies are transitive.

+5
source share
3 answers

Hi everyone, this is how I ended up archiving what I needed, and I hope it will be useful for all of you.

First of all, I would like to thank pczeus and Björn Kautler for the answers that helped me get to this solution.

So, so I solved my problem:

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'
 }

If you do:

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

You will 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)

I wanted to get the same "dependency tree", but in JSON format. So this is the “task” I created for this:

 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
   }
 }

If you completed this task:

  gradle -b build.gradle printSolvedDepsTreeInJson

You will receive the following:

  [
   {
     "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/geronos.1jj_j .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.Finaljar ",
     "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/5e731d961297e5a07290bfaf3db1fbc8bbbfh5apa -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/geronos.1jj_j .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/hibernot-commons .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.RELASE ",
     "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.2j.ar ",
         "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. ",
             "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.RELASE ",
                 "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.RELASE ",
             "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. ",
         "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.RELASE ",
             "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.RELASE ",
         "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.2j.ar ",
             "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. ",
                 "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.RELASE ",
                     "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.RELASE ",
                 "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. ",
             "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.RELASE ",
                 "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.RELASE ",
             "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.ar ",
             "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.RELASE ",
                 "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.RELASE ",
         "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": []
   }
 ]

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

For example, firstLevel dependency:

  org.javassist: javassist: 3.13.0-GA

Modified for:

  org.javassist: javassist: 3.20.0-GA

As

  org.hibernate: hibernate-core: 5.1.0.Final

depends on:

  org.javassist: javassist: 3.20.0-GA

which is a higher version than:

  org.javassist: javassist: 3.13.0-GA

And Gradle's default conflict resolution algorithm always selects the "latest" version.

Actually, this is what:

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

Used to output to the console. 3.13.0-GA was overridden by version 3.20.0-GA.

Now this is a problem because I am not getting the actual "dependency tree". I get "resolved".

As a result, I established this situation by setting another TASK:

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

If you do this:

  gradle -b build.gradle printDepsTreeInJson

Now you get the following:

  : 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"}

This is not the final “dependency tree” (I ended up creating it with javascript), but this is what you need to create it!

"from" is a dependency requesting another dependency, and "requested" is the requested actual dependency! :)

If

  "from": "project:"

This means that dependence is dependence on the first level. (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"}

Please note that I now have two

  org.javassist: javassist

Each of them is related to the addiction that really requested it. One of them is dependence on the first level:

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

and the other was asked asleep:

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

I was too lazy to generate a dependency tree in JSON in the same task :) But it’s clear that this is the way to go if you need to analyze the “original” (old / unsolved) dependency tree for some reason.

This is the contents of the final build.gradle file if you want to copy and paste it and try:

  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
   }
 }
+10
source

You can create a task in your Gradle file to iterate over all the dependencies and generate JSON as you wish. Here is an example task that will pretty print JSON for you:

 task printDependencies << { def json = '"dependencies": [' configurations.runtime.resolvedConfiguration.resolvedArtifacts.each { artifact -> def id = artifact.moduleVersion.id // println "group: ${id.group}, name: ${id.name}, version: ${id.version}" json += JsonOutput.toJson(id) } json += "]" json = JsonOutput.prettyPrint(json) println json } 

With sample output:

 "dependencies": [ { "group": "com.fasterxml.jackson.core", "version": "2.6.5", "name": "jackson-core", "module": { "group": "com.fasterxml.jackson.core", "name": "jackson-core" } }{ "group": "org.springframework", "version": "4.2.5.RELEASE", "name": "spring-aop", "module": { "group": "org.springframework", "name": "spring-aop" } } ] 
+10
source

The easiest way would be to write your own implementation of DependencyReportRenderer , and then either configure the existing dependencies task to use it, or define a new task of the DependencyReportTask type with the custom visualizer setup.

+2
source

Source: https://habr.com/ru/post/1246832/


All Articles