请参阅下面的示例。Gradle 4.3 没有重命名/移动方法,因此我们可以即时重命名。
发生了什么:
- 将文件树加载到内存中。我在示例中使用了依赖项中的 zip 文件
- 筛选项目,位于目标文件夹中
- 所有结果项都将具有相同的前缀:如果我们从目录“A/B/C/”过滤文件,那么所有文件将类似于“A/B/C/file.txt”或“A/B/C/D” /file.txt”。例如,所有这些都将以相同的单词开头
- 在每个文件的最后一条语句中,我们将通过剪切目录前缀来更改最终名称(例如,我们将剪切“A/B/C”)。
- 重要提示:使用任务类型“复制”,它对增量编译进行了优化。如果以下所有项目都为真,Gradle 将不会进行文件复制:
- 输入与以前的构建相同(对于我的情况 - 范围“nativeDependenciesScope”的所有依赖项)
- 您的函数返回与先前构建相同的项目
- 目标文件夹具有相同的文件哈希,与以前的构建
task copyNativeDependencies(type: Copy) {
includeEmptyDirs = false
def subfolderToUse = "win32Subfolder"
def nativePack = configurations.nativeDependenciesScope.singleFile // result - single dependency file
def nativeFiles = zipTree(nativePack).matching { include subfolderToUse + "/*" } // result - filtered file tree
from nativeFiles
into 'build/native_libs'
eachFile {
print(it.path)
// we filtered this folder above, e.g. all files will start from the same folder name
it.path = it.path.replaceFirst("$subfolderToUse/", "")
}
}
// and don't forget to link this task for something mandatory
test.dependsOn(copyNativeDependencies)
run.dependsOn(copyNativeDependencies)