【问题标题】:Unzip gradle dependencies using artifact name使用工件名称解压缩 gradle 依赖项
【发布时间】:2016-12-25 07:07:04
【问题描述】:

我正在寻找一种方法来将某个配置的项目依赖项提取到工作区文件夹中。由于可能存在多个依赖项,我想将每个工件提取到具有工件名称的文件夹中。我试图在 python 的上下文中解决这个问题,但这个问题与 python 无关......

目前我的 gradle 文件如下所示:

configurations { python }

dependencies {
  python group: 'github.dpeger', name: 'py-utils', version: '1.6', ext: 'zip'
  python group: 'github.dpeger', name: 'py-test', version: '1.6', ext: 'zip'
}

task cleanPythonDependencies(type: Delete) { delete 'lib/python' }
tasks.clean.dependsOn cleanPythonDependencies

task importPythonDependencies(type: Copy) {
  dependsOn cleanPythonDependencies
  from {
    configurations.python.collect { zipTree(it) }
  }
  into 'lib/python'
}

然而,这会将 python 配置中的所有依赖项提取到文件夹 lib\pyhton 中,而不使用工件的名称。

我想要的是 py-utils 被提取到 lib\pyhton\py-utils 和 py-test 到 lib\pyhton\py-test。

【问题讨论】:

    标签: gradle dependencies unzip


    【解决方案1】:

    假设您希望将 py-utils 提取到 lib\pyhton\py-utils 并将 py-test 提取到 lib\pyhton\py-test,这应该可以完成工作:

    task importPythonDependencies() {
      dependsOn cleanPythonDependencies
    
      String collectDir = 'lib/python'
      outputs.dir collectDir
    
      doLast {
        configurations.python.resolvedConfiguration.resolvedArtifacts.each { artifact ->
          copy {
            from zipTree( artifact.getFile() )
            into collectDir + '/' + artifact.name
          }
        }
      }
    }
    

    【讨论】:

    • 效果很好,谢谢。但是,我稍微修改了您的答案(请参阅问题的编辑),因为 - 在您的任务中 - 在 gradle 的配置阶段,工件将被复制到 lib 文件夹中。这很可能会导致清理出现问题,因为依赖任务 cleanPythonDependencies 将在配置阶段之后执行,从而再次删除所有提取的工件...
    • 很高兴它有帮助。我已经修改了答案以反映您的 cmets。我尝试时没有考虑清理。尽管如此,它不应该是您指出的配置阶段的一部分。
    猜你喜欢
    • 1970-01-01
    • 2015-11-28
    • 2012-05-10
    • 2010-11-24
    • 2016-04-09
    • 1970-01-01
    • 2013-10-22
    • 2018-05-12
    • 1970-01-01
    相关资源
    最近更新 更多