With
the Gradle copy task we can define renaming rules for the files that are copied.
We use the rename()
method of the copy task to define the
naming rules. We can use a closure where the filename is the argument of the
closure. The name we return from the closure is the new name of copied file. Or
we can define a regular expression and set the replacement value for the
corresponding regular expression. We can use groups in the regular expression
and use them in the replacement value like $<group>
.
0.
task
copyFiles(type: Copy) {
1.
from
'src/files'
2.
into
"$buildDir/files"
3.
rename
'(.*)-(.*).html'
,
'$2/$1.html'
4.
rename
~/(.*).template.(.*)/,
'$1.$2'
5.
rename
{ filename ->
6.
filename.replace
'java'
,
'groovy'
7.
}
8.
}
Let's create some source files, so the renaming rules can be applied to them.
src/files/index-en.html
:
<html>
<body>
<h1>Hello
Gradle</h1>
</body>
</html>
src/files/index-nl_NL.html
:
<html>
<body>
<h1>Hallo
Gradle</h1>
</body>
</html>
src/files/sample.template.txt
:
Sample
file.
src/files/Sample.java
:
public
class Sample {
private
String gradle = "Gradle";
}
We
run $
gradle copyFiles
and we get
the following files in build/files
:
nl_NL
|
+--
index.html
en
|
+--
index.html
Sample.groovy
sample.txt