从Android Gradle插件8.0发布Maven时不会自动创建软件组件

wr98u20j  于 2023-01-05  发布在  Android
关注(0)|答案(4)|浏览(739)

使用Gradle 7.2和这些插件:

plugins {
    id 'com.android.library' // Android Gradle Plugin 7.1.2
    id 'maven-publish'
}

它仍然可以工作,但给了我这个不赞成的警告:
警告:不会为Android Gradle插件8.0中的Maven发布自动创建软件组件。要选择加入未来行为,请在gradle.properties文件中设置Gradle属性android.disableAutomaticComponentCreation=true或使用新的发布DSL。
发行说明中也提到了这一点,但这些都是指过时的文档:
从AGP 8.0开始,默认情况下将禁用自动组件创建。目前,AGP 7.1会自动为每个构建变体创建一个组件,该组件与构建变体具有相同的名称,并创建一个包含所有构建变体的所有组件。此自动组件创建将被禁用。要转换到新行为,你应该通过设置android.disableAutomaticComponentCreationtrue手动禁用自动组件创建。
有关详细信息,请参见Use the Maven Publish plugin
但在文件gradle.properties中启用AGP 8.0默认行为预览时:

android.disableAutomaticComponentCreation=true

找不到属性components.release

FAILURE: Build failed with an exception.

* Where:
Script 'publish.gradle' line: 53

* What went wrong:
A problem occurred configuring project ':library'.
> Could not get unknown property 'release' for SoftwareComponentInternal set of type org.gradle.api.internal.component.DefaultSoftwareComponentContainer.

有问题的一行内容如下:

release(MavenPublication) {
    from components.release
}

变量is仍然存在,但它不再创建组件:

androidComponents {
    onVariants(selector().all(), {
        println "$it.name"
    })
}

如何升级到这个"新的发布DSL"并创建要发布的软件组件?

kx1ctssn

kx1ctssn1#

根据PublishingOptions,必须定义一个android.publishing块:

android {
    publishing {
        singleVariant('release') {
            withSourcesJar()
            withJavadocJar()
        }
        // ...
    }
}

要一次定义多个变量:

android {
    publishing {
        multipleVariants {
            withSourcesJar()
            withJavadocJar()
            allVariants()
        }
    }
}

然后,例如components.getByName('release')将再次已知。

dy1byipe

dy1byipe3#

在android目录中的gradle.properties文件中,您可以添加以下行以禁用此警告

android.disableAutomaticComponentCreation=true

enter image description here

r7knjye2

r7knjye24#

若要避免此警告,可以在gradle.properties文件中添加

android.disableAutomaticComponentCreation=true

相关问题