Удалить часть пути к файлу при извлечении из zip с помощью Gradle Copy / Sync - PullRequest
0 голосов
/ 18 мая 2018

Учитывая 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 взаданный целевой каталог, сохраняющий полную структуру почтового индекса:

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'), похоже, не работает, так как действует только на имена файлов, а переименование здесь относится к пути.

1 Ответ

0 голосов
/ 18 мая 2018

Используя Gradle 4.5.1, ниже приводится приемлемый факсимильный аппарат, который работает:

Он использует функцию eachFile ( doc ) в задаче Sync.Ниже мы изменим путь к объекту 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}")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...