Appearance
文件集合
文件集合(File Collections)是 Gradle 中表示一组文件的核心概念,支持懒加载和过滤。
ConfigurableFileCollection
kotlin
// 创建文件集合
val myFiles: ConfigurableFileCollection = files(
"a.txt",
file("b.txt"),
fileTree("src") { include("**/*.java") }
)
// 添加到集合
myFiles.from("c.txt")
myFiles.from(configurations["runtimeClasspath"])
// 获取所有文件
myFiles.files.forEach { println(it) }
// 转换为路径列表
val paths = myFiles.asPath // 路径以 : 分隔(Unix)或 ; 分隔(Windows)FileTree
kotlin
// 基础文件树
val srcTree = fileTree("src") {
include("**/*.java", "**/*.kt")
exclude("**/generated/**", "**/test/**")
}
// 过滤
val mainSources = srcTree.matching {
include("main/**")
}
// 遍历
srcTree.visit { element ->
if (element.isDirectory) {
println("目录:${element.path}")
} else {
println("文件:${element.path},大小:${element.file.length()}")
}
}懒加载文件集合
kotlin
// 使用 Provider(推荐,避免配置阶段计算)
val outputFiles = layout.buildDirectory.files("output.jar", "output-sources.jar")
tasks.register("myTask") {
val inputs = files(provider {
fileTree("src") { include("**/*.java") }
})
inputs.files(inputs)
doLast {
inputs.files.forEach { println(it) }
}
}SourceDirectorySet(源码集使用)
kotlin
// 访问 Java 插件的源码集
val mainSources: SourceDirectorySet = sourceSets.main.get().java
println(mainSources.srcDirs) // [src/main/java]
println(mainSources.files.size)