如何访问gradle编译依赖项的源工件?

如何访问gradle编译依赖项的源工件?,gradle,Gradle,我编写了以下任务,它提取每个子项目的所有编译依赖项,并将它们放在每个子项目目录中: task exportCompileLibs << { subprojects.each { iSubProject -> iSubProject.configurations.findAll{it.name == "compile"}.each{ jConfig -> println "copying compile libs for ${iSubProject.

我编写了以下任务,它提取每个子项目的所有编译依赖项,并将它们放在每个子项目目录中:

task exportCompileLibs << {
  subprojects.each { iSubProject ->
    iSubProject.configurations.findAll{it.name == "compile"}.each{ jConfig ->
      println "copying compile libs for ${iSubProject.name}..."
      copy {
        into "${iSubProject.buildDir}/gradle-lib-export"
        from jConfig
        eachFile {println it.name}
      }
    }
  }
}
task exportCompileLibs
iSubProject.configurations.findAll{it.name==“compile”}。每个{jConfig->
println“正在复制${iSubProject.name}的编译库…”
抄袭{
进入“${iSubProject.buildDir}/gradle lib export”
来自jConfig
每个文件{println it.name}
}
}
}
}
我想扩展它以导出Gradle已经知道的源工件(我可以在缓存目录中看到源JAR),我只是不知道如何使用对象模型来获取它们的句柄

IDEA和Eclipse插件似乎能够做到这一点(它们将构建的项目文件直接指向gradle缓存),但我不知道如何做到这一点——看看IDE插件源代码,它看起来。。。棘手的我希望gradle DSL或API中有一些明显的缺失


有人有什么想法吗?

目前没有比IDE插件更简单的方法了。这将有望在未来发生变化。

对于任何寻求至少一个临时解决方案的人来说,下面的内容似乎正是我目前想要的

对于要导出依赖项的每个项目,必须将IDEA插件应用于build.gradle文件:

应用插件:“创意”

然后定义此任务:

task exportDependencies << {
  def deps = project.extensions.getByType(IdeaModel).module.resolveDependencies()
  copy {
    from deps*.classes.file
    into "${buildDir}/gradle-lib-export/libs"
  }

  copy {
    from deps*.sources.file
    into "${buildDir}/gradle-lib-export/sources"
  }
}
task exportDependencies请参阅,以获取不依赖IDE插件的解决方案。
task exportDependencies(description: "export project dependency jars") << {
  subprojects.each { Project iSubProject ->
    String target = "${iSubProject.buildDir}/gradle-lib-export"

    IdeaPlugin ideaPlugin = new IdeaPlugin()
    ideaPlugin.apply(iSubProject)
    Set<Dependency> deps = ideaPlugin.model.module.resolveDependencies()

    println "exporting dependencies for $iSubProject.name into $target"
    copy {
      from deps*.classes.file
      into "${target}/libs"
      eachFile { println "lib -> $it.name" }
    }
    copy {
      from deps*.sources.file
      into "${target}/sources"
      eachFile{ println "source -> $it.name" }
    }
  }
}