2016-03-11 14 views

risposta

9

Ci sono due cose separate da discutere qui: Configurazioni delle dipendenze e Fonti di dipendenza.

dipendenza Configurazioni

Configurazioni aiutare a definire il transitività di una dipendenza, che a sua volta elimina il dolore di dover scoprire e specificare le librerie il proprio progetto/libreria richiede, tra di loro automaticamente. Questa nozione di configurazioni in Gradle è molto simile a quella di Maven's scopes:

  1. compile: Compilare le dipendenze sono disponibili in tutti i percorsi di classe di un progetto. Inoltre, tali dipendenze vengono propagate a progetti dipendenti. Generalmente è richiesta una dipendenza in fase di compilazione in fase di runtime.
  2. apk: definisce una dipendenza di runtime. Una dipendenza con questo ambito non sarà richiesta al momento della compilazione, ma sarà per l'esecuzione. Ciò significa che è possibile risparmiare tempo durante la compilazione e avere ancora la dipendenza disponibile quando il progetto viene effettivamente eseguito. This è un buon esempio di quando utilizzare una dipendenza apk.
  3. provided: significa che questa dipendenza è disponibile nell'ambiente di runtime. Di conseguenza, questo ambito è disponibile solo per il classpath di compilation e test e non è transitivo. Non è supportato su progetti Android, sebbene sia possibile aggirarlo definendo la propria configurazione come discusso here.

Ci sono più configurazioni che si possono incontrare su Android, come ad esempio testCompile, che permette di specificare una dipendenza in fase di compilazione che verrà utilizzata solo per il test, dicono che si desidera utilizzare JUnit nei test, quindi si dovrebbe procedere come segue:

testCompile 'junit:junit:4.12' 

dipendenza Fonte

una volta capito le configurazioni disponibili per te, è necessario specificare una dipendenza vera e propria. Le dipendenze potrebbero essere interne o esterne, si può fare affidamento su un'altra libreria su cui si sta lavorando, oltre che su librerie disponibili pubblicamente. Qui è dove arriva la parola chiave project, che consente di specificare una dipendenza a un modulo o una libreria interna. Definendo una dipendenza come compile project, si sta aggiungendo quel modulo o libreria come una dipendenza transitiva al progetto.

Si supponga di avere un progetto messages con tre moduli (producer, consumer e shared), la struttura del progetto apparirebbe come segue:

messages/ 
    build.gradle 
    settings.gradle 
    consumer/ 
     build.gradle 
    producer/ 
     build.gradle 
    shared/ 
     build.gradle 

Ora supporre che sia i messaggi consumer e producer memorizzare in formato JSON, e che vuoi usare google-gson per quello scopo.Supponiamo che entrambi i progetti abbiano un codice sorgente comune da cui dipendono, il tuo modulo shared. s build.gradle consumer' potrebbe quindi definire le seguenti dipendenze:

dependencies { 
    // Internal dependency to project shared 
    compile project (':shared') 

    // External dependency to publicly available library, 
    // through public repositories such as jcenter() or mavencentral() 
    compile 'com.google.code.gson:gson:1.7.2' 
} 

In sintesi, è la combinazione di entrambe le configurazioni e fonti che consente di dichiarare le dipendenze come compile, compile project, apk project e Di Più!

+2

Gradle utilizza * configuration * anziché * scope * – RaGe

+1

Grazie a @RaGe, hai ragione. Risposta aggiornata con vocabolario appropriato. – unbekant