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

Gradle多项目构建中,非根项目Zip任务如何访问项目版本?

在Gradle多项目子项目的Zip任务中正确获取项目版本的方法

核心问题原因

Zip任务本身自带一个version属性,直接在任务闭包里写$version会优先引用任务自身的这个属性(默认是null),而非项目的版本。

解决方法

1. 显式引用项目版本

在Zip任务里用project.version明确指定取当前子项目的版本,避免作用域混淆:

task createZip(type: Zip) {
    archiveFileName = "my-app-${project.version}.zip"
    // 补充Zip任务的其他配置,比如指定打包内容
    from project.sourceSets.main.output
    destinationDirectory = file("$buildDir/distributions")
}

2. 确保版本配置生效

  • 如果版本是根项目统一定义的,检查根项目build.gradle里的配置是否覆盖到子项目:
    allprojects {
        version = "1.0.0" // 全局统一版本
    }
    
  • 子项目无需重复定义版本,直接通过project.version即可继承根项目的配置。

3. 延迟配置适配动态版本

如果版本是动态生成的(比如通过插件、脚本计算),用Gradle的延迟加载机制确保任务执行时能拿到最新版本:

task createZip(type: Zip) {
    archiveFileName = provider { "my-app-${project.version}.zip" }
    from project.sourceSets.main.output
}

这种方式会在任务实际执行阶段才计算文件名,避免配置阶段版本未初始化的问题。

4. 验证版本是否正确加载

如果还是有问题,先加个简单任务确认子项目的版本是否正常:

task checkVersion {
    doLast {
        println "当前子项目版本:${project.version}"
    }
}

运行./gradlew :你的子项目名:checkVersion,如果能输出正确版本,那回到Zip任务用project.version就没问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:40:57