Thu*_*rge 1 groovy copy gradle
我有一个像这样的 Gradle 复制任务:
task copyFromZip(type: Copy) {
from zipTree("Example.zip")
into "build/output"
}
Run Code Online (Sandbox Code Playgroud)
Zip 文件内是这样的:
+--- photos
| +--- StackOverflow
| \--- foo.png
| \--- Super User
| \--- bar.png
+--- text
| \--- Stack Exchange
| +--- StackOverflow
| \--- foo.txt
| \--- Super User
| \--- bar.txt
Run Code Online (Sandbox Code Playgroud)
当我运行复制任务时,目录将被保留。例如,我有build/output/photos/StackOverflow/foo.png
.
我想要做的是在复制时重命名目录。例如,假设我意识到“StackOverflow”中应该有空格。我希望将文件photos/StackOverflow/foo.png
复制到build/output/photos/Stack Overflow/foo.png
,并将同样的内容应用于其他文件夹中名称为“StackOverflow”而不是“Stack Overflow”的文件。
我的第一个想法是添加一个rename{}
块。
task copyFromZip(type: Copy) {
from zipTree("Example.zip")
into "build/output"
rename { String filePath ->
filePath.replace("StackOverflow", "Stack Overflow")
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我发现rename{}
只给出文件名,而不给出路径。
我也尝试过操纵relativePath
使用eachFile{}
task copyFromZip(type: Copy) {
from zipTree("Example.zip")
into "build/output"
eachFile{ file ->
file.relativePath = file.relativePath.replace("StackOverflow", "Stack Overflow")
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这会导致Could not expand ZIP
错误。
如何使用 Gradle 复制任务重命名我正在复制的文件路径上的目录?
您可以使用eachFile
或filesMatching
,它使您可以访问源路径和目标路径的所有详细信息。例如:
task copy(type: Copy) {
from zipTree("Example.zip")
into "build/output"
filesMatching("**/StackOverflow/**/*") {
it.path = it.path.replace("StackOverflow", "Stack Overflow")
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4671 次 |
最近记录: |