简体   繁体   English

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

[英]Android Library - Publish Multiple Variants to Local Maven Repository using Gradle

I am using Android Gradle plugin 0.13.2, Android Studio 0.8.11, Gradle 2.1 and maven plugin. 我使用的是Android Gradle插件0.13.2,Android Studio 0.8.11,Gradle 2.1和maven插件。

I would like to install multiple variants (flavour + build type) of my Android Library to local Maven repository all with one command (task). 我想用一个命令(任务)将我的Android库的多个变体(flavor + build类型)安装到本地Maven存储库。

Currently Android Gradle plugin 0.13.2 allows me to set publishNonDefault flag to publishing all variants, but as the documentation states it will publish the variants with a classifier which is not compatible with Maven Repository. 目前Android Gradle插件0.13.2允许我将publishNonDefault标志设置为发布所有变体,但正如文档所述,它将使用与Maven Repository不兼容的分类器发布变体。

My workaround right now is to use defaultPublishConfig "myVariant" and change it for every variant I have. 我现在的解决方法是使用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"
    }
}

I would like to have a single task that would properly publish all variants to local Maven repository. 我想有一个任务可以正确地将所有变种发布到本地Maven存储库。

To solve this I had to create one Upload task for each variant and make them depend on each other and on a master task that starts the process. 为了解决这个问题,我必须为每个变体创建一个上载任务,并使它们相互依赖,并依赖于启动该过程的主任务。

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

The task installArchives will publish all variants to the local Maven repository. 任务installArchives将所有变体发布到本地Maven存储库。

./gradlew installArchives

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM