gradle - 使用gradle复制/同步从zip提取文件时删除文件路径的一部分

标签 gradle

给定一个zip文件声明为gradle依赖项

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')似乎不起作用,因为它仅作用于文件名,此处的重命名与路径有关。

最佳答案

使用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}")
    }
}

关于gradle - 使用gradle复制/同步从zip提取文件时删除文件路径的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50406550/

相关文章:

android - Android Studio 中的意外顶级异常

android - “GradleBuild”任务意外失败

apache-spark - WARN SparkContext:正在构造另一个SparkContext(或在其构造函数中引发了异常)

firebase - 在pubspec.yaml文件中添加firebase_auth或cloud_firestore时,构建失败(带有异常)(firebase_core正在运行):

android - java.io.FileNotFoundException gradle.properties(不允许操作)

jenkins - 带有逗号v的cvs文件名

android - 如何在 build.gradle 中为版本指定通用字符串?

java - Gradle distZip 任务在 Windows 上执行但在 Linux 上运行

android - Kotlin 多平台 : Plugin [id: 'com.android.library' ] was not found

java - 子项目之间的 Gradle 依赖关系