Skip to content

资源处理

资源文件(src/main/resources/)由 processResources 任务处理,可以进行过滤、复制和内容替换。

基本配置

kotlin
tasks.named<ProcessResources>("processResources") {
    // 过滤文件(替换占位符)
    filesMatching("**/*.yml") {
        expand(
            "appVersion" to project.version,
            "appName" to project.name,
            "buildTime" to java.time.LocalDate.now()
        )
    }
    
    // 排除不需要的文件
    exclude("**/*.bak", "**/.gitkeep")
}

Spring Boot 资源过滤

Spring Boot 项目的 application.yml 中使用 @ 占位符(默认):

yaml
# src/main/resources/application.yml
spring:
  application:
    name: @project.name@

info:
  app:
    version: @project.version@
    encoding: @project.build.sourceEncoding@
kotlin
// build.gradle.kts - 启用 Spring Boot 风格的资源过滤
tasks.named<ProcessResources>("processResources") {
    with(copySpec {
        from("src/main/resources")
        filter<org.apache.tools.ant.filters.ReplaceTokens>(
            "beginToken" to "@",
            "endToken" to "@",
            "tokens" to mapOf(
                "project.name" to project.name,
                "project.version" to project.version.toString()
            )
        )
    })
}

不同环境的资源配置

kotlin
// 根据 profile 选择不同的资源目录
val profile = project.findProperty("profile") as String? ?: "dev"

sourceSets {
    main {
        resources {
            srcDir("src/main/resources")
            srcDir("src/main/resources-$profile")  // dev/test/prod
        }
    }
}
bash
# 使用 prod 环境配置构建
./gradlew build -Pprofile=prod

排除测试资源

kotlin
tasks.named<ProcessResources>("processTestResources") {
    // 测试资源不需要替换版本号
    // exclude("application.yml")
}

下一步