不再能够在Maven发布中使用bundleReleaseAar

CJx*_*JxD 8 android gradle android-gradle-plugin

将Gradle升级到5.1.1后,我发现无法将其bundleReleaseAar作为工件添加到我的MavenPublication中。这是我的build.gradle的相关代码段:

apply plugin: 'maven-publish'

publishing {
    publications {
        aar(MavenPublication) {
            groupId libraryGroupId
            version libraryVersion
            artifactId libraryArtifactId

            artifact bundleReleaseAar
            //artifact sourcesJar
            //artifact packageJavadoc
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

失败的原因是:

Could not get unknown property 'bundleReleaseAar' for object of type org.gradle.api.publish.maven.internal.publication.DefaultMavenPublication.

但是,我可以看到bundleReleaseAar在运行时确实存在./gradlew tasks,并且可以很好地执行该任务。

是什么阻止了它现在被用作我的部署中的工件?

Ros*_*han 15

简短答案:

您需要将发布{}块封装在项目中。afterEvaluate如下:

project.afterEvaluate {
    publishing {
        publications {
            aar(MavenPublication) {
                groupId libraryGroupId
                version libraryVersion
                artifactId libraryArtifactId

                artifact bundleReleaseAar
                //artifact sourcesJar
                //artifact packageJavadoc
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

长答案:

在gradle 4.8版之前,对发布块进行隐式处理,就好像在评估项目后执行了其中的所有逻辑一样。这只是以这种方式运行的块,并且出于一致性的考虑,此行为在gradle版本4.8之后已终止。bundleReleaseAar任务似乎仅在项目评估完成后才可用,因此为了保持行为,必须将其显式封装在project.afterEvaluate {}中

参考:https : //docs.gradle.org/current/userguide/upgrading_version_4.html#rel4.8 : deferred_configuration