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

Gradle多项目模块中processResources扩展问题:跨模块使用filesMatching获取project.version返回null的排查

问题分析与解决方案:跨模块Gradle资源处理的filesMatching限制

你的怀疑完全正确——filesMatching确实无法匹配其他模块中的文件,这是由Gradle模块任务的作用范围决定的,我来帮你拆解清楚:

核心原因

每个Gradle模块的processResources任务,默认只负责处理当前模块内的资源文件(比如src/main/resources目录下的内容),不会主动扫描或处理其他模块的文件。你在project2的脚本里写的processResources,只会盯着project2自己的资源目录,根本看不到project1里的MyConfiguration.kt。

两种写法的差异

  • 第一种写法里,你用filesMatching("**/MyConfiguration.kt")指定了匹配规则,但因为文件不在project2的资源范围内,这个规则找不到任何文件,变量替换操作根本没执行,所以最终拿到的版本值是null。
  • 修改为直接调用expand(props)后,Gradle会对project2的processResources任务管辖的所有资源文件执行变量替换,这时候能拿到正确版本,要么是project2自己的某个文件需要替换版本,要么是你的项目构建流程中存在特殊配置,让project2的任务间接处理了相关内容,但本质上和project1的那个文件无关。

正确的解决方案

如果要处理project1里的MyConfiguration.kt,你需要把这段配置写到project1的Gradle脚本里,而不是project2中。比如:

processResources {
    // 这里可以根据需求获取版本:如果是根项目版本用rootProject.version,要是project2的版本就用project(':project2').version
    def props = ['version': rootProject.version]
    filesMatching("**/MyConfiguration.kt") {
        expand(props)
    }
}

这样就能精准匹配到project1中的目标文件,完成版本变量的替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 08:47:39