Android库 - 使用Gradle将多个变体发布到本地Maven仓库

11

我正在使用Android Gradle插件0.13.2、Android Studio 0.8.11、Gradle 2.1和Maven插件。

我想通过一个命令(任务)将我的Android库的多个变种(口味+构建类型)安装到本地Maven仓库中。

目前,Android Gradle插件0.13.2允许我设置publishNonDefault标志以发布所有变种,但文档说明它会发布具有分类器的变种,这与Maven仓库不兼容。

我的解决方法是使用defaultPublishConfig“myVariant”,并为每个变种更改它。

apply plugin: 'com.android.library'
apply plugin: 'maven'

android {
    defaultPublishConfig "myVariant"
    .
    .
    .

}

task installArchives(type: Upload) {
    repositories.mavenInstaller {
        configuration = configurations.getByName(Dependency.DEFAULT_CONFIGURATION)
        pom.groupId = "com.company"
        pom.artifactId = "mylibrary"
        pom.version = "1.0.0-myVariant"
    }
}

我希望有一个单一的任务,能够将所有变体正确地发布到本地Maven仓库。

1个回答

15
为了解决这个问题,我不得不为每个变体创建一个上传任务,并使它们互相依赖,并且依赖于开始进程的主任务。
apply plugin: 'com.android.library'
apply plugin: 'maven'

android {
    .
    .
    .

}

// Master task that will publish all variants
def DefaultTask masterTask = project.tasks.create("installArchives", DefaultTask)

android.libraryVariants.all { variant ->
    variant.outputs.each { output ->

        // Configuration defines which artifacts will be published, create one configuration for each variant output (artifact)
        def Configuration variantConfiguration = project.configurations.create("${variant.name}Archives")
        project.artifacts.add(variantConfiguration.name, output.packageLibrary)

        // Create one Upload type task for each configuration
        def Upload variantTask = project.tasks.create("${variant.name}Install", Upload)
        variantTask.configuration = variantConfiguration
        variantTask.repositories.mavenInstaller {
            pom.groupId = "com.yourcompany"
            pom.artifactId = "yourLibrary"
            pom.version = "1.0.0-${variant.name}" //Give a different version for each variant
            pom.packaging = "aar"
        }

        // Make all tasks depend on each other and on master task
        masterTask.dependsOn variantTask
        masterTask = variantTask
    }
}

installArchives任务将所有的变体发布到本地Maven仓库。

./gradlew installArchives

很遗憾,每个变体都没有生成pom.xml文件。你知道怎么解决吗? - Dmitry Zaytsev
@DmitryZaitsev 可能您没有为每个变体生成不同的配置。如果使用相同的配置,则不会为所有变体生成一个 .pom。 - Marcelo Benites
能否请您在回答中提供更多细节?我试着用谷歌搜索了很长时间,但没有找到相关信息。 - Dmitry Zaytsev
在这一行代码中:def Configuration variantConfiguration = project.configurations.create("${variant.name}Archives"),我为每个变体创建了一个配置。请确保您也这样做了。 - Marcelo Benites
如何为所有变体包含源代码 jar 和 javadoc jar? - Louis CAD
从版本7.1.0-alpha10开始,Android Gradle插件提供了一个新的发布API,可以通过withSourcesJar()withJavadocJar()配置源代码jar和javadoc jar。更多细节请参见issue 145670440。相关资料: https://androidstudio.googleblog.com/2021/07/android-studio-bumblebee-canary-4.html。 - JJD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接