2014-09-30 18 views
7

Android Gradle eklentisi 0.13.2, Android Studio 0.8.11, Gradle 2.1 ve maven eklentisini kullanıyorum.Android Kitaplığı - Gradle ile Yerel Maven Deposu için Çoklu Varyantlar Yayınlayın

Android Kitaplığımın birden çok çeşidini (lezzet + yapı tipi) tek bir komutla (görev) yerel Maven deposuna yüklemek istiyorum.

Şu anda Android Gradle eklentisi 0.13.2, publishNonDefault bayrağını tüm varyantları yayınlamaya ayarlamamı sağlıyor, ancak dokümantasyonda varyantları Maven Repository ile uyumlu olmayan bir sınıflandırıcıyla yayınlayacağını belirtiyor.

Şu anki çözümüm, defaultPublishConfig "myVariant" işlevini kullanmak ve sahip olduğum her varyasyon için değiştirmektir.

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

düzgün yerel Maven deposuna tüm varyantları yayınlayacağını tek görev var istiyorum.

cevap

10

Bunu çözmek için, her bir varyant için bir Yükleme görevi oluşturmalı ve bunları birbirine ve işlemi başlatan bir ana görev üzerinde yapmaları gerekiyordu.

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

görev installArchives yerel Maven'in deposuna tüm varyantları yayınlayacaktır.

./gradlew installArchives 
+0

Ne yazık ki her değişken için pom.xml dosyaları oluşturulmuyor. Bunu nasıl çözeceğinizi biliyor musunuz? –

+0

@DmitryZaitsev muhtemelen her bir varyant için farklı yapılandırmalar oluşturmuyorsunuz. Aynı yapılandırmayı kullanırsanız, tüm varyantlar için bir .pom oluşturmaz. – Benites

+0

Lütfen cevabınızda daha fazla bilgi verebilir misiniz? Google’a bunu denemek için biraz zaman harcadım, ama şanssız. Bu doğrultuda –

İlgili konular