不再能够在 MavenPublication 中使用 bundleReleaseAar

No longer able to use bundleReleaseAar in MavenPublication

将 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
        }
    }
}

这失败了:

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

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

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

我修复了这个问题更改神器来自:

artifact bundleReleaseAar

至:

artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")

这帮助我 Gradle 同步成功,但我必须在 ./gradlew publish

之前直接调用 assembleRelease

简答:

您需要将发布 {} 块包含在 project.afterEvaluate 中,如下所示:

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

                artifact bundleReleaseAar
                //artifact sourcesJar
                //artifact packageJavadoc
            }
        }
    }
}

长答案:

在 gradle 4.8 版之前,发布块被隐式处理,就好像它里面的所有逻辑都是在项目评估后执行的。这只是块以这种方式表现,为了保持一致性,这种行为已停止 post gradle 4.8 版。 bundleReleaseAar 任务似乎只有在项目评估完成后才可用,因此为了保持行为,它必须明确包含在 project.afterEvaluate{}

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

我通过将 artifact 函数调用到 afterEvaluate 闭包中解决了这个问题,问题是 artifact 函数不会延迟处理所有配置

publishing {
   publications {
      aar(MavenPublication) {
        groupId libraryGroupId
        version libraryVersion
        artifactId libraryArtifactId
        afterEvaluate {
           artifact bundleReleaseAar
           //artifact sourcesJar
           //artifact packageJavadoc
        }
     }
   }
}

引用https://github.com/moberwasserlechner/capacitor-oauth2/issues/10

如果你有多种口味,那么你需要使用 bundleReleaseAar