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

升级Gradle与Android Gradle Plugin至8.x后无法发布Android库

解决AGP 8.x + Gradle 8.x下Android库发布的隐式依赖错误

问题场景

原项目使用Gradle 7.6.1 + Android Gradle Plugin(AGP) 7.4.2,发布相关配置如下:

plugins {
    id("com.android.library")
    id("maven-publish")
}

task generateSourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    archiveClassifier.set("sources")
}

afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                from components.release
                artifact generateSourcesJar

                groupId "com.tazkiyatech"
                artifactId "android-utils"
                version "1.0.0"
            }
        }

        repositories {
            maven {
                name = "BuildFolder"
                url = "${project.buildDir}/repository"
            }
        }
    }
}

升级至Gradle 8.x + AGP 8.x后,执行publish系列任务时触发报错:

  • What went wrong:
    A problem was found with the configuration of task ':library:generateSourcesJar' (type 'Jar').
    • Gradle detected a problem with the following location: '/Users/adil/Work/TazkiyaTech/android-utils/library/build/libs/library-sources.jar'.

      Reason: Task ':library:generateMetadataFileForReleasePublication' uses this output of task ':library:generateSourcesJar' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed.

      Possible solutions:

      1. Declare task ':library:generateSourcesJar' as an input of ':library:generateMetadataFileForReleasePublication'.
      2. Declare an explicit dependency on ':library:generateSourcesJar' from ':library:generateMetadataFileForReleasePublication' using Task#dependsOn.
      3. Declare an explicit dependency on ':library:generateSourcesJar' from ':library:generateMetadataFileForReleasePublication' using Task#mustRunAfter.

解决方案

只需在afterEvaluate块中,给自动生成的metadata任务添加对generateSourcesJar的显式依赖即可,修改后的完整配置如下:

plugins {
    id("com.android.library")
    id("maven-publish")
}

task generateSourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    archiveClassifier.set("sources")
}

afterEvaluate {
    // 给自动生成的metadata任务添加显式依赖
    tasks.named("generateMetadataFileForReleasePublication") {
        dependsOn(generateSourcesJar)
    }

    publishing {
        publications {
            release(MavenPublication) {
                from components.release
                artifact generateSourcesJar

                groupId "com.tazkiyatech"
                artifactId "android-utils"
                version "1.0.0"
            }
        }

        repositories {
            maven {
                name = "BuildFolder"
                url = "${project.buildDir}/repository"
            }
        }
    }
}

补充说明

Gradle 8.x对任务依赖的校验更为严格,不再允许隐式依赖存在。通过tasks.named()可以定位到publishing插件自动生成的generateMetadataFileForReleasePublication任务,再用dependsOn声明它必须在generateSourcesJar执行完成后再运行,即可解决依赖缺失的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:37:15