2014-09-30 168 views
7

我正在使用Android Gradle插件0.13.2,Android Studio 0.8.11,Gradle 2.1和maven插件。Android庫 - 使用Gradle將多個變體發佈到本地Maven存儲庫

我想用一個命令(任務)將我的Android庫的多個變體(flavor + build type)安裝到本地Maven倉庫中。

目前Android的搖籃插件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存儲庫。

回答

10

爲了解決這個問題,我必須爲每個變體創建一個上傳任務,並使它們彼此依賴並依賴於啓動該過程的主任務。

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 
+0

不幸的是,不會爲每個變體生成pom.xml文件。你知道如何解決它嗎? – 2015-05-28 10:02:18

+0

@DmitryZaitsev可能你沒有爲每個變體生成diferente配置。如果使用相同的配置,它將不會爲所有變體生成一個.pom。 – Benites 2015-06-12 16:44:01

+0

你能否在你的回答中提供更多細節?我花了一段時間嘗試谷歌,但沒有運氣。 – 2015-06-12 20:50:56

相關問題