2015-05-17 55 views
2

我想要在gradle任務中獲取所有依賴關係(包括可傳遞依賴關係)的信息。如何獲取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}" 
     } 
     } 
    } 
    } 

} 

但只打印申報的,沒有傳遞的。

這意味着,如果我的dependencies是:

dependencies { 
    compile "com.google.guava:guava:18.0" 
    compile 'org.codehaus.groovy:groovy-all:2.3.11' 
    testCompile 'junit:junit:4.11' 
} 

它只打印這3依賴性,但org.hamcrest:hamcrest-core:1.3這是不顯示的junit:junit:4.11的傳遞依賴。

如何修改代碼以讓其顯示org.hamcrest:hamcrest-core:1.3

PS:我知道gradle dependencies任務會顯示我想要的一切,但我需要手動獲取依賴關係信息並以我自己的格式打印它。

+1

您需要解決的依賴關係,例如'project.configurations.detachedConfiguration(deps依賴[])。resolvedConfiguration'。有關示例,請參閱[gradle-versions-plugin](https://github.com/ben-manes/gradle-versions-plugin)。 –

回答

3

最後,我搞清楚其後續任務

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 
}