2014-09-30 15 views
7

Utilizzo il plug-in Gradle Android 0.13.2, Android Studio 0.8.11, Gradle 2.1 e il plug-in Maven.Libreria Android - Pubblica varianti multiple al repository Maven locale utilizzando Gradle

Vorrei installare più varianti (flavor + tipo di build) della mia libreria Android nel repository Maven locale con un solo comando (attività).

Attualmente il plug-in Gradle per Android 0.13.2 consente di impostare il flag publishNonDefault per la pubblicazione di tutte le varianti, ma come afferma la documentazione pubblicherà le varianti con un classificatore che non è compatibile con Maven Repository.

La mia soluzione ora è quella di usare defaultPublishConfig "myVariant" e cambiarlo per ogni variante che ho.

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

mi piacerebbe avere un unico compito che sarebbe corretto pubblicare tutte le varianti di repository Maven locale.

risposta

10

Per risolvere questo problema, ho dovuto creare un'attività di caricamento per ogni variante e farle dipendere l'una dall'altra e da un'attività principale che avvia il processo.

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

Il compito installArchives pubblicherà tutte le varianti al repository Maven locale.

./gradlew installArchives 
+0

Purtroppo i file pom.xml non vengono generati per ciascuna variante. Sai come risolverlo? –

+0

@DmitryZaitsev probabilmente non stai generando configurazioni diverse per ciascuna variante. Se utilizzi la stessa configurazione, non genererà un file .pom per tutte le varianti. – Benites

+0

Potresti fornire maggiori dettagli nella risposta? Ho passato un po 'di tempo a provare a Google, ma senza fortuna. –