如何使用Gradle将依赖项导出到不同的位置?

时间:2016-04-19 22:40:18

标签: gradle

我想避免创建不同的配置,因为我希望有很多不同的行为与我的依赖关系相关联,而不仅仅是这个。

因此,感谢'ext'属性,我能够将自己的数据与依赖关系相关联:

runtime 'org.apache.logging.log4j:log4j-api:2.5'
runtime 'org.apache.lucene:lucene-core:5.4.1'
runtime('hsqldb:hsqldb:1.8.0.10') { ext.exportTo = 'jdbc' }

现在我想利用它将默认情况下的依赖项复制到'libs /',如果指定了exportTo,则使用'libs / $ {exportTo} /'。

task copyRuntimeLibs(type: Copy) {
  into "build/dependencies"
  from configurations.runtime
}

所以我正在尝试为这些特殊的依赖项创建一个动态创建的配置,并创建一个动态创建的任务来完成这项工作,我将其链接到主要任务'copyRuntimeLibs':

configurations.runtime.allDependencies.withType(ExternalModuleDependency).each { d ->
  if (d.hasProperty("exportTo")) {
    def key = "${d.group}:${d.name}:${d.version}"
    def configname = "config-${key}"

    def c = project.configurations.create(configname)
    c.getDependencies().add(d)

    def task = task "task-${key}"(type: Copy) {
      into "build/dependencies/${d.ext.exportTo}"
      from c
    }
    project.tasks.add(task)
    copyRuntimeLibs.dependsOn task
  }
}

因此执行动态任务,但不会复制任何内容。当我添加'eachFiles'进行调试时,它不会去那里。

有任何线索吗?

1 个答案:

答案 0 :(得分:0)

task copyRuntimeLibs

copyRuntimeLibs << {
  configurations.runtime.allDependencies.withType(ExternalModuleDependency).each { d ->
    def exportFolder = 'build/dependencies'
    def exportSub = ''
    if (d.hasProperty("exportTo")) {
      exportSub = d.ext.exportTo
    }
    def key = "${d.group}:${d.name}:${d.version}"
    def c = project.configurations.create("config-${key}")
    c.getDependencies().add(d)

    copy {
      from c
      into "${exportFolder}/${exportSub}/"
    }
  }
}