给定一个声明为gradle依赖的zip文件
dependencies {
orientdb(group: "com.orientechnologies", name: "orientdb-community", version: orientdbVersion, ext: "zip")
}
包含以下结构中的文件
.
└── orientdb-community-2.2.33
├── benchmarks
│ ├── bench_memory_get.bat
│ └── post.txt
├── bin
│ ├── backup.sh
...
可以使用以下任务将zip内容同步到给定的目标目录,同时保留zip的完整结构:
task("deploy-db", type: Sync) {
from(configurations.orientdb.collect { zipTree(it) })
into(orientdbTgt)
}
如何配置上述任务以从结果中删除"orientdb-community-$orientdbVersion"
目录,以便输出为:
/${orientdbTgt}
├── benchmarks
│ ├── bench_memory_get.bat
│ └── post.txt
├── bin
│ ├── backup.sh
...
信息:rename("(.*/)orientdb-community-$orientdbVersion/(.+)", '$1$2')
似乎不起作用,因为它仅对文件名起作用,此处的重命名与路径有关。
答案 0 :(得分:1)
使用Gradle 4.5.1,以下是一个合理的传真机。
它使用eachFile
任务上的Sync
(doc)功能。下面,我们更改FileCopyDetails
传递的eachFile
对象的路径。
project.ext.orientdbTgt = 'staging'
project.ext.prefixDir = "orientdb-community-2.2.33${File.separator}"
task("deploy-db", type: Sync) {
from(configurations.orientdb.collect { zipTree(it) })
into(orientdbTgt)
eachFile { fileCopyDetails ->
def originalPath = fileCopyDetails.path
fileCopyDetails.path = originalPath.replace(prefixDir, "")
}
doLast {
ant.delete(dir: "${orientdbTgt}/${prefixDir}")
}
}