You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gradle中过滤单个资源(类Maven的filter功能)

解决Gradle仅过滤单个资源文件的问题

要实现只对version.properties执行变量替换,同时保留其他资源文件的正常复制(不触发模板替换),可以通过拆分processResources的文件处理逻辑来实现,以下是两种可行的配置方案:

方案一:拆分资源处理规则

通过exclude先排除需要过滤的文件,再单独引入该文件并应用expand操作,确保其他资源不受影响:

tasks {
    processResources {
        // 排除需要单独处理的文件,避免被默认规则处理
        exclude 'version.properties'
        
        // 单独引入目标文件并执行变量替换
        from(sourceSets.main.resources.srcDirs) {
            include 'version.properties'
            expand(project_version: project.version)
        }
    }
}

如果version.properties在子目录下(比如META-INF/version.properties),只需调整include和exclude的路径即可。

方案二:按文件名动态处理

通过eachFile遍历所有资源文件,仅对目标文件名执行expand操作:

tasks {
    processResources {
        eachFile { fileDetails ->
            if (fileDetails.name == 'version.properties') {
                // 仅对目标文件应用变量替换
                expand(project_version: project.version)
            }
            // 其他文件不做模板替换,保持原内容复制
        }
    }
}

原理说明

这两种方案都避免了Gradle默认对所有资源文件应用expand模板处理器,只会对指定的version.properties执行变量替换,其他包含$xxx格式的文件会直接复制,不会触发不存在变量的报错。

内容的提问来源于stack exchange,提问作者oldpotentialnews

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 05:42:10