2016-04-10 7 views
5

は私がやっていることを知っています。今、私は、その依存関係ツリーをプログラム的に操作する方法を探しています。これは、同じ階層を印刷することができますが、GRALEがコンソールで現在使用している形式の代わりにJSONで印刷できます。すべてのgradle依存関係をプログラム的にリストする方法はありますか?</p> <pre><code>gradle dependencies </code></pre> <p>リストの完全な依存関係ツリーを:

私はそれを達成するために使用すべきグルーヴィークラスを誰かが知っていますか?

EDITED

私は(JSONで)このようないくつか入手したいと思います:あなたはこれをここに見ることができるように、私は推移、他のどの依存関係に依存する依存関係を知っている

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

を。

答えて

10

こんにちはすべて、これは私が必要なものをアーカイブすることになった方法ですし、うまくいけばのために有用であろうあなたの残りの部分。

まず、私はこのソリューションに手伝ってくれた彼らの答えに "pczeus"と "BjörnKautler"に感謝したいと思います。

だから、これは私が私の問題を解決する方法である:あなたが行う場合は

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

:このbuild.gradleを考えると

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

あなたはこの出力が得られますコンソール:

 
: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形式で取得することでした。

 
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であるあなたは、このタスクを実行した場合

 

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

:これは、 "タスクが" 私はそれを行うために作成されます私が必要とした依存性ツリーの表現。 もっと見ると、build.gradleで定義した依存関係の実際のリストではないことがわかります。解決済みの依存関係ツリーです。これは、いくつかの依存関係が変更されたことを意味します。

例えば第1レベルの依存関係:

 
org.javassist:javassist:3.13.0-GA 

が変更されました:

 
org.hibernate:hibernate-core:5.1.0.Final 

として

 
org.javassist:javassist:3.20.0-GA 

が依存:

 
org.javassist:javassist:3.20.0-GA 
より高いバージョンです

 
org.javassist:javassist:3.13.0-GA 

とのGradleによってデフォルト競合解決アルゴリズムは常に「最新」バージョンを選択します。

実はこれは何ですか:コンソール出力に

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

を意味します。 3.13.0-GAは3.20.0 GAバージョンでオーバーライドされました。

これは実際の「依存関係ツリー」を取得していないため、これは問題です。私は「解決済み」を取得しています。

私は別のタスクを定義することによって、この状況を修正終わった:

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

あなたはこの実行する場合:

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

これは、次のとおりです。

 
gradle -b build.gradle printDepsTreeInJson 

をあなたは今、これを取得します最終的な "依存関係のツリー"(私はjavascriptを使ってそれを構築することになった)ではなく、実際にそれを生成する必要があります!

"from"は別の依存関係を要求した依存関係であり、 "requested"は要求されている実際の依存関係です。 :)

依存性 "が第1レベル" 依存性であることを意味する

 
"from":"project :" 

場合。他のすべての依存関係は次のようになります(ルート)

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

お知らせ私が持っている今、実際にそれを要求し、依存関係に関連した2つの

 
org.javassist:javassist 

各1。休止状態から要求された

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

と他の1: 一つは「最初のレベル」依存関係です

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

は、私が同じタスクにJSONでの依存関係ツリーを生成するのが面倒だった:)しかし、何らかの理由で、「元の」(以前/未解決の)依存関係ツリーを解析する必要がある場合は、これが進む方法であることは明らかです。

これは、あなたが&ペーストをコピーし、それを試してみたい場合は最終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 
    } 
} 
2

最も簡単には、おそらくあなた自身のDependencyReportRenderer実装を作成し、その後のいずれかにそれを使用するために、既存のdependenciesタスクを設定、または設定され、独自のレンダラとタイプDependencyReportTaskの新しいタスクを定義することです。

+0

ありがとうございました!あなたが説明したクラスを見ていきます。実際にGradleスクリプトをデバッグするのに良いIDEを知っていますか? –

+0

特定のレンダーを使用するようにタスクを設定するにはどうすればよいですか? –

+0

私はIntelliJ IDEAを使用しています。太陽の下で最高のJava IDEであり、Gradleスクリプトの作成やデバッグにも優れています。まあ、 'task jsonDeps(型:DependencyReportTask){レンダラーnew MyOwnRenderer()}'のようなものです。しかし、それは私の心の外で、それをまだ試していないです。 – Vampire

10

あなたのGradleファイル内にタスクを作成して、すべての依存関係を反復処理し、適切と思われるJSONを生成することができます。ここではかなりあなたのためのJSONを出力します例のタスクです:

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 
} 

サンプル出力で:

"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" 
     } 
    } 
] 
+0

解決済みの依存関係をJSON形式で表示するという良い例を示すために、この回答を更新しました。 – pczeus

+0

pczeusこのような詳細な回答をありがとう!しかし、私は木を操作することができるように、依存関係の依存関係を知る必要があります(私が興味を持っているものです)。再度質問をご覧ください。私はそれを編集して、私が得ようとしている期待される結果が何であるかをよりよく説明する。もう一度ありがとう! –

+0

問題ありません。 Groovyのドキュメントを[Configuration](https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/ConfigurationContainer.html)で見れば、すべての設定でallDependenciesを取得することもできます。さらに、[resolvedConfiguration](https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/ResolvedConfiguration.html)には、第1レベルの依存関係とすべての子を取得するAPIがあります。だから、タスクを調整して、必要に応じてツリーをナビゲートすることができるはずです。 – pczeus

関連する問題