I know how to get gradle to dump the depencies of an Android project with ./gradlew app:dependencies
but what I want is:
- For a specific build, not just all of them.
- in a flat format, not a tree I need to parse
- For a specific package, not just one.
I know how to get gradle to dump the depencies of an Android project with ./gradlew app:dependencies
but what I want is:
I would highly recommend you try creating a build scan for this, which will show a filterable dependency tree like this one.
Two caveats, though:
Cheers,
Eric
Thanks, I will look up build scan and whatnot. I would like to have a flat list of dependencies too, rather than in a tree.
Re the package, I mean like for com.facebook.fresco:imagepipeline-okhttp3:1.0.1
. I want to find all the dependencies of that, that is including transitive ones too.
Will this work for you? I used compile
configuration as an example.
configurations.compile.allDependencies.each { Dependency d->
println "${d.group}:${d.name}:${d.version}"
}
Very rough-and-ready, and only prints to the console, but should give you an idea where to start.
Thanks,
I tried in the root build.gradle
of an android project:
task foo { configurations.compile.allDependencies.each { Dependency d-> println "${d.group}:${d.name}:${d.version}" } }
But this errors with:
* What went wrong:
A problem occurred evaluating root project 'android'.
> Could not get unknown property 'compile' for configuration container.
You need to replace cmopile
with a valid configuration name. Your root project will probably contain no configurations. Try the same in the app
subproject. Valid configuration names are the same as which would be returned by app:dependencies
Thanks, will try.
This code sample, it will only print out the first level of dependencies right, not the transitive ones as well.
Is this useful (using junit as an example instead of imagepipeline-okhttp3)?
dependencies {
compile 'org.spockframework:spock-core:+'
}
task dumpDepsOfInterest {
doLast {
def componentOfInterest = configurations.compile.incoming.resolutionResult.allComponents.find { comp ->
comp.moduleVersion.group == 'junit' && comp.moduleVersion.name == 'junit'
}
if( componentOfInterest != null ) {
println componentOfInterest.moduleVersion
def deps = []
deps.addAll( componentOfInterest.dependencies )
while( deps.size() > 0 ) {
def currDep = deps.pop()
if( currDep instanceof ResolvedDependencyResult ) {
println currDep.selected.moduleVersion
deps.addAll( currDep.selected.dependencies )
} else {
throw new GradleException( "Could not resolve ${currDep.requested}" )
}
}
} else {
throw new GradleException( "Could not find component of interest" )
}
}
}
Dependecy tree:
$ ./gradlew dependencies --configuration=compile -q
compile - Dependencies for source set 'main' (deprecated, use 'implementation ' instead).
\--- org.spockframework:spock-core:+ -> 1.1-groovy-2.4
+--- org.codehaus.groovy:groovy-all:2.4.9
\--- junit:junit:4.12
\--- org.hamcrest:hamcrest-core:1.3
Task output:
$ ./gradlew dumpDepsOfInterest -q
junit:junit:4.12
org.hamcrest:hamcrest-core:1.3
Oh awesome! I modified it slightly and works for me great! Thanks!