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