File相關(guān)操作代碼:
//Project.file() 方法能夠相對項目目錄定位一個文件
task filePosition {
File configFile = file('mountains.xml')
configFile = file(configFile.absolutePath)
println(configFile.absolutePath)
configFile = file(new File('src/build/config.xml'))
configFile.mkdirs()
println(configFile.absolutePath)
}
//根據(jù)一個 XML ,在build/generated下生成多個輸出文件
task transform {
def srcFile = file('mountains.xml')
def destDir = new File(buildDir, 'generated')
doLast {
println "transforming source file."
destDir.mkdirs()
def mountains = new XmlParser().parse(srcFile) //解析mountains.xml文件得到節(jié)點
mountains.children().each {
def name = it.name()
def destFile = new File(destDir, "${name}.txt")
destFile.text = "$name"
}
}
}
//讀寫gradle.properties文件屬性
task propertiesWrite {
def defaultProps = new Properties()
def propertiFile = new File(rootDir, "gradle.properties") //根目錄下gradle.properties文件
def inputStream = propertiFile.newDataInputStream()
defaultProps.load(inputStream) //Properties讀取文件流
defaultProps.setProperty("version", "1.1.0") //properti設(shè)置新屬性
def version = defaultProps.getProperty("version") //properti讀取新屬性
println("當(dāng)前配置 version: " + version)
}
//打印 當(dāng)前配置 version: 1.1.0
//創(chuàng)建文件集合,使用 FileCollection 接口表示文件集合
task collections {
FileCollection collection = files('src/file1.txt', new File('src/file2.txt'), 'src/file3.txt')
collection.each {
println(it.absolutePath)
}
def files = collection.files //文件集合轉(zhuǎn)set
def list = collection as List //文件集合轉(zhuǎn)list
def union = collection + file('src/file4.txt')
def different = collection - file('src/file3.txt')
}
//使用標(biāo)準(zhǔn)輸出寫入log信息
task loggerTask {
logger.error("error message")
logger.info("info message")
logger.warn("warn message")
logger.debug("debug message")
logger.quiet("An info log message which is always logged.")
logger.lifecycle("A lifecycle info log message.")
}
//文件樹形操作
task fileTree {
FileTree tree = fileTree('src/main/res')
//遍歷訪問文件樹的元素
tree.visit { element->
println "$element.file"
}
}
//復(fù)制文件,任務(wù)類型為Copy,Copy類的父類定義好了from 和 into函數(shù)
task copyTask(type: Copy) {
//因為在copy類型的task下,所以能直接用該task下的函數(shù)
//包括函數(shù) from to rename fileter等
from('src/main/java') //添加要復(fù)制的文件
from('mountains.xml') //繼續(xù)添加要復(fù)制的文件
from file('src/main/res') //繼續(xù)添加要復(fù)制的文件
into('src/copyPath') //into表示要拷貝到的文件路徑
// rename { fileName -> //文件重命名
// fileName.relace('','')
// }
}
參考:
https://juejin.cn/post/6844903838290296846#comment
https://doc.yonyoucloud.com/doc/wiki/project/GradleUserGuide-Wiki/index.html
demo參考:
https://github.com/running-libo/GradleStudy