【问题标题】:No longer able to use bundleReleaseAar in MavenPublication不再能够在 MavenPublication 中使用 bundleReleaseAar
【发布时间】:2019-04-26 08:55:21
【问题描述】:

将 Gradle 升级到 5.1.1 后,我发现我无法将 bundleReleaseAar 作为工件添加到我的 MavenPublication。这是我的 build.gradle 的相关 sn-p:

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 确实存在,并且我可以很好地执行该任务。

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

【问题讨论】:

    标签: android gradle android-gradle-plugin


    【解决方案1】:

    简答:

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

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

    长答案:

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

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

    【讨论】:

    • 包裹在afterEvaluate 对我不起作用,我还缺少什么吗?也许是我没有申请的插件?
    • apply plugin: 'com.android.library' 和 apply plugin: 'maven-publish' 应该是您唯一需要的插件。你遇到了什么错误?您在 Android 库中工作吗?
    • 无法获得未知属性“bundleReleaseAar”。我在一个 android 库中工作,是的。
    • 实际上apply plugin: 'com.android.library' 是问题所在。我在项目 build.gradle 中有我的发布代码。它在库模块 build.gradle 中工作。
    【解决方案2】:

    我修复了这个问题,更改工件来自:

    artifact bundleReleaseAar
    

    到:

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

    这帮助我 Gradle 同步成功,但我必须在 ./gradlew publish 之前直接调用 assembleRelease

    【讨论】:

    • 谢谢,这当然是一种可行的手动方式。问题在于 MavenPublication 任务和构建之间不再存在依赖关系,因此调用 ./gradlew publish 将不会重新构建项目。
    【解决方案3】:

    我通过在 afterEvaluate 闭包中调用 artifact 函数解决了这个问题,问题是 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

    【讨论】:

      【解决方案4】:

      如果您有多种口味,则需要使用 bundleReleaseAar

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-09
        • 1970-01-01
        • 2021-12-15
        • 2017-11-22
        • 2011-11-14
        • 1970-01-01
        • 2019-05-24
        • 2022-01-09
        相关资源
        最近更新 更多