Fre*_*ind 4 plugins dependencies task gradle transitive-dependency
我想在gradle任务中获取所有依赖项(包括可传递的)的信息.
我试过这段代码:
class MyGradlePlugin implements Plugin<Project> {
void apply(Project project) {
project.afterEvaluate {
println " Project:" + project.name
project.configurations.each { conf ->
println " Configuration: ${conf.name}"
conf.allDependencies.each { dep ->
println " ${dep.group}:${dep.name}:${dep.version}"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但它只打印声明的,没有传递的.
这意味着,如果我dependencies是:
dependencies {
compile "com.google.guava:guava:18.0"
compile 'org.codehaus.groovy:groovy-all:2.3.11'
testCompile 'junit:junit:4.11'
}
Run Code Online (Sandbox Code Playgroud)
它只打印这3个依赖项,但不显示org.hamcrest:hamcrest-core:1.3哪个是传递依赖项junit:junit:4.11.
如何修改代码让它显示org.hamcrest:hamcrest-core:1.3?
PS:我知道gradle dependencies任务会显示我想要的一切,但我需要手动获取依赖项信息并以我自己的格式打印.
小智 5
最后,我通过跟进任务弄清楚了
class Dep {
String group
String name
String version
String extention
String classifier
Dep(String group, String name, String version, String extension, String classifier) {
this.group = group
this.name = name
this.version = version
this.extention = extension
this.classifier = classifier
}
}
task collectAllDeps << {
def deps = []
configurations.each {
conf ->
conf.getResolvedConfiguration().getResolvedArtifacts().each {
at ->
def dep = at.getModuleVersion().getId()
println at.getFile().getAbsolutePath()
// dep = dep1.getComponentIdentifier()
println "$dep.group:$dep.name:$dep.version"
deps.add(new Dep(dep.group, dep.name, dep.version, at.extension, at.classifier))
}
}
def json = groovy.json.JsonOutput.toJson(deps)
json = groovy.json.JsonOutput.prettyPrint(json)
new File("deps.json") << json
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1758 次 |
| 最近记录: |