2015-02-14 17 views
8

Ho un applicazione di test con tre sapori:Gradle: risolvere solo le dipendenze per la variante desiderata

  • dev: utilizza una copia locale della biblioteca durante lo sviluppo
  • qa: utilizza uno snapshot durante QA
  • rc: utilizza una build preliminare per il test di rilascio del candidato.

dependencies { 
    devCompile project(':library') 
    qaCompile 'com.example:library:[email protected]' 
    rcCompile 'com.example:library:[email protected]' 
} 

corro Gradle, e si aspettano di fare la minima quantità di lavoro necessario per costruire proprio quello che voglio:

./gradlew :test-app:connectedAndroidTestDevDebug 

Tuttavia, la build non riesce, perché è cercando di risolvere le dipendenze per tutti i sapori di build, non solo per quello che sto costruendo.

FAILURE: build non riuscita con un'eccezione.

* cosa è andato storto:

è verificato un problema configurazione di Project ': test-app'.

Impossibile risolvere tutte le dipendenze per la configurazione ': test-app: _qaDebugCompile'.

Impossibile trovare com.example: library1.0.0-SNAPSHOT.

Searched in the following locations: 
    https://repo1.maven.org/maven2/com/example/library/1.0.0-SNAPSHOT/maven-metadata.xml 
    https://repo1.maven.org/maven2/com/example/library/1.0.0-SNAPSHOT/library-1.0.0-SNAPSHOT.pom 
    https://repo1.maven.org/maven2/com/example/library/1.0.0-SNAPSHOT/library-1.0.0-SNAPSHOT.aar 
    http://oss.sonatype.org/content/repositories/snapshots/com/example/library/1.0.0-SNAPSHOT/maven-metadata.xml 
    http://oss.sonatype.org/content/repositories/snapshots/com/example/library/1.0.0-SNAPSHOT/library-1.0.0-SNAPSHOT.pom 
    http://oss.sonatype.org/content/repositories/snapshots/com/example/library/1.0.0-SNAPSHOT/library-1.0.0-SNAPSHOT.aar 
    file:/opt/android-sdk-macosx/extras/android/m2repository/com/example/library/1.0.0-SNAPSHOT/maven-metadata.xml 
    file:/opt/android-sdk-macosx/extras/android/m2repository/com/example/library/1.0.0-SNAPSHOT/library-1.0.0-SNAPSHOT.pom 
    file:/opt/android-sdk-macosx/extras/android/m2repository/com/example/library/1.0.0-SNAPSHOT/library-1.0.0-SNAPSHOT.aar 
    file:/opt/android-sdk-macosx/extras/google/m2repository/com/example/library/1.0.0-SNAPSHOT/maven-metadata.xml 
    file:/opt/android-sdk-macosx/extras/google/m2repository/com/example/library/1.0.0-SNAPSHOT/library-1.0.0-SNAPSHOT.pom 
    file:/opt/android-sdk-macosx/extras/google/m2repository/com/example/library/1.0.0-SNAPSHOT/library-1.0.0-SNAPSHOT.aar 
Required by: 
    project-name:test-app:unspecified 

L'istantanea che il sapore qa sta cercando di risolvere non esiste ancora, e che dovrebbe andare bene, perché io non sto cercando di costruire il sapore qa. Se la build di SNAPSHOT è presente, allora tutto funziona correttamente.

Domande:

  1. Perché sono tutti costruire i sapori che hanno le loro dipendenze risolto?
  2. Come posso realizzare un solo sapore senza incontrare questo problema?
  3. C'è un modo migliore per farlo che sarà più "Gradley"?

risposta

1

Ho finalmente risolto questo controllando l'elenco delle attività e se c'è un compito per la variante di costruzione desiderata, aggiungendo la dipendenza.

dependencies { 
    gradle.startParameter.taskRequests.each { taskRequest -> 
    taskRequest.args.each { taskName -> 
     String flavorName = "qa"; 
     if (taskName.toLowerCase().endsWith(flavorName+"debug") || 
      taskName.toLowerCase().endsWith(flavorName+"release")) { 
     qaCompile 'com.example:my-library:[email protected]' 
     } 
    } 
    } 
    devCompile project(':localLibrary') 
//qaCompile 'com.example:my-library:[email protected]' // What I used to do. 
    rcCompile 'com.example:my-library:[email protected]' 
} 

Tenete a mente che l'elenco di attività non conterrà nomi delle attività a carico, quindi se non si sta invocando un compito che contiene il nome di build sapore, non funzionerà. Questo è solo qualcosa che ho lavorato.

0

Suppongo che la build funzioni se si esclude l'attività manualmente?

gradle connectedAndroidTestDevDebug -x _qaDebugCompile 

Sembra che il compito connectedAndroidTestDevDebug ha una dipendenza sul compito _qaDebugCompile, che causa il problema. Non so come sono definiti i tuoi compiti, ma puoi studiare le tue dipendenze usando le attività incorporate di Gradle gradle dependencies e gradle dependencyInsight. Forse che vi darà un suggerimento nella giusta direzione:

gradle dependencyInsight --dependency com.example:library:1.0.0-SNAPSHOT 

Si può leggere di più su relazioni tra le attività in the gradle User's guide.

Problemi correlati