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

时间:2012-09-09 11:42:12

标签: gradle

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

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

我想扩展这个也导出Gradle已经知道的源工件(我可以在缓存目录中看到源jar),我只是想不通如何使用对象模型来获取他们的手柄。

IDEA和Eclipse插件似乎能够做到这一点(他们将他们直接构建的项目文件指向gradle缓存),但我无法弄清楚如何做到这一点 - 并查看IDE插件源代码,它看起来......棘手。我希望有一些明显的东西,我在gradle DSL或API中缺少。

有人有任何想法吗?

2 个答案:

答案 0 :(得分:1)

对于任何寻求至少一个临时解决方案的人来说,以下似乎完全正是我现在想做的事情。

您必须将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(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" }
    }
  }
}

+10点不会让我的构建任务列表与我不想要的东西混淆, - ewwwww 的几百万点。

答案 1 :(得分:0)

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