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

如何在Gradle复合构建的根构建中获取引入构建的任务属性

Gradle复合构建读取引入构建任务属性方案

可行性说明

这种操作完全可行,你之前写法返回null的核心原因是:复合构建默认会按需配置引入构建(included build),你在根构建配置阶段直接读取任务属性时,目标引入构建的配置阶段还未执行,任务属性尚未完成初始化。

解决方案

方案1:执行阶段读取(推荐,不影响配置性能)

将属性读取逻辑放在任务的执行阶段,同时声明对目标引入构建任务的依赖,确保执行读取逻辑前目标任务已经完成配置:

// 根构建build.gradle 示例代码
tasks.register('readIncludedBuildArtifactPath') {
    // 声明依赖,确保执行前includedBuild1的目标任务已完成配置
    dependsOn gradle.includedBuild('includedBuild1').task(':project1:shadowJar')
    doLast {
        // 执行阶段读取属性,此时属性已完成初始化
        def targetArchive = gradle.includedBuild('includedBuild1').task(':project1:shadowJar').archiveFile.get()
        println "目标构件路径:${targetArchive.asFile.absolutePath}"
    }
}

执行./gradlew readIncludedBuildArtifactPath即可拿到对应属性值。

方案2:配置阶段强制触发引入构建配置

如果确实需要在根构建的配置阶段拿到属性,可以主动触发所有引入构建完成配置,注意该操作会延长整体配置时间,非必要不推荐:

// 根构建build.gradle 示例代码
// 强制所有引入构建完成配置
gradle.includedBuilds.each { it.ensureConfigured() }
// 直接读取目标任务属性
def targetArchive = gradle.includedBuild('includedBuild1').task(':project1:shadowJar').archiveFile.get()
println "配置阶段读取到的目标构件路径:${targetArchive.asFile.absolutePath}"

补充注意点

你之前在includedBuild1根构建中引用shadowJar任务失败、以及示例代码中用了:project1:jar任务,是因为shadowJar是project1项目单独应用插件后生成的任务,仅存在于project1的任务容器中:

  • 若你需要读取的是Shadow插件生成的构件,不要使用普通jar任务,直接指定任务路径为:project1:shadowJar即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:18:00