使用构件名称解压Gradle依赖项

5
我希望能够提取某个配置下的项目依赖项到工作区文件夹中,这些依赖项可能不止一个,我希望将每个构件提取到以该构件名称命名的文件夹中。我正在尝试在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-utilspy-test被提取到lib\pyhton\py-test

1个回答

5
假设您希望将 py-utils 提取到 lib\python\py-utils,并将 py-test 提取到 lib\python\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将在配置阶段之后执行,从而再次删除所有提取的构件... - dpr
1
很高兴能帮到你。我已经根据你的评论修改了答案。当我尝试时,我没有考虑清理工作。尽管如此,正如你指出的那样,它不应该是配置阶段的一部分。 - David Schwarz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接