Files
Last updated
Was this helpful?
Last updated
Was this helpful?
Was this helpful?
We can define what files should be copied, excluded, included and where these should end up.
task copyMyFiles(type: Copy) {
from 'myfiles'
into 'build/copied'
exclude '**/*test*'
include '**/*.sh'
}
We can configure copy in many ways. We can include many directories, files and do many manipulations in single task.
def dataContent = copySpec {
from 'src/data'
include '*.data'
}
task initConfig(type: Copy) {
from('src/main/config') {
include '**/*.properties'
include '**/*.xml'
filter(ReplaceTokens, tokens: [version: '2.3.1'])
}
from('src/main/config') {
exclude '**/*.properties', '**/*.xml'
}
from('src/main/languages') {
rename 'EN_US_(.*)', '$1'
}
into 'build/target/config'
exclude '**/*.bak'
includeEmptyDirs = false
with dataContent
rename { fileName ->
"production-file${(fileName - 'file-template')}"
}
}
Copy and transform a file. expand method uses SimpleTemplateEngine from Groovy.
versionId = '1.6'
task fillInTemplate(type: Copy) {
from 'source'
include 'config.properties'
into 'build/war/WEB-INF/config'
expand([
databaseHostname: 'db.company.com',
version: versionId,
buildNumber: (int)(Math.random() * 1000),
date: new Date()
])
}
While config can look like this (it is a template).
hostname: ${databaseHostname}
appVersion: ${version}
locale: en_us
initialConnections: 10
transferThrottle: 5400
queueTimeout: 30000
buildNumber: ${buildNumber}
buildDate: ${date.format("yyyyMMdd'T'HHmmssZ")}
We can filter content of copied file, line by line.
task filter(type: Copy) {
into 'build/poems'
from 'source'
include 'todo.txt'
rename { it - '.txt' + '.html'}
filter { line ->
line.toUpperCase()
}
}
We can do operations for each file we are coping.
task files(type: Copy) {
into 'build/deploy'
from 'source'
eachFile { fileCopyDetails ->
// do something fileCopyDetails.file.text
}
}
The files()
method returns collection of files based on input parameters.
def f = files('src')
println f.files
println f.asPath
Iterates through directory structure and collects the files as it traverses through the tree structure.
def xmlFilesOnly = fileTree('src/main/resources') {
include '**/*.xml'
}
println xmlFilesOnly.files
FileCollections are lazily evaluated. We can contact or subtract file collections.
def poems = fileTree(dir: 'src/main/resources', include: '*.txt')
def romantics = fileTree(dir: 'src/main/resources', include: 'shelley*')
def goodPoems = poems - romantics
println sourceSets.main.allSource.files
println sourceSets.main.output.files