2013-06-23 21 views
7

Sto imparando come funziona Gradle e non riesco a capire come risolva le dipendenze transitive del progetto.Perché Gradle non include le dipendenze transitive in classpath di compilazione/runtime?

Per ora, ho due progetti:

  • Projecta: che ha un paio di dipendenze da librerie esterne
  • ProjectB: che ha una sola dipendenza projectA

Non importa come Ci provo, quando costruisco projectB, gradle non include alcuna dipendenza projectA (X e Y) nel percorso di compilazione o runtime del progetto B. Sono riuscito a farlo funzionare includendo le dipendenze di projectA nello script di build di projectB, che, a mio parere, non ha alcun senso. Queste dipendenze dovrebbero essere automaticamente associate a projectB. Sono abbastanza sicuro che mi manca qualcosa ma non riesco a capire cosa.

Ho letto di "lib dependencies", ma sembra che si applichi solo a progetti locali come descritto here, non su dipendenze esterne.

Ecco la build.gradle che uso nel progetto principale (quella che contiene sia projectA e ProjectB):

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.3' 
    } 
} 

subprojects { 
    apply plugin: 'java' 
    apply plugin: 'idea' 

    group = 'com.company' 

    repositories { 
     mavenCentral() 
     add(new org.apache.ivy.plugins.resolver.SshResolver()) { 
      name = 'customRepo' 
      addIvyPattern "ssh://.../repository/[organization]/[module]/[revision]/[module].xml" 
      addArtifactPattern "ssh://.../[organization]/[module]/[revision]/[module](-[classifier]).[ext]" 
     } 
    } 

    sourceSets { 
     main { 
      java { 
       srcDir 'src/' 
      } 
     } 
    } 

    idea.module { downloadSources = true } 

    // task that create sources jar 
    task sourceJar(type: Jar) { 
     from sourceSets.main.java 
     classifier 'sources' 
    } 

    // Publishing configuration 
    uploadArchives { 
     repositories { 
      add project.repositories.customRepo 
     } 
    } 

    artifacts { 
     archives(sourceJar) { 
      name "$name-sources" 
      type 'source' 
      builtBy sourceJar 
     } 
    } 
} 

Questo riguarda solo projectA:

version = '1.0' 
dependencies { 
    compile 'com.company:X:1.0' 
    compile 'com.company:B:1.0' 
} 

E questo è quello utilizzato dal progetto B:

version = '1.0' 
dependencies { 
    compile ('com.company:projectA:1.0') { 
     transitive = true 
    } 
} 

Grazie in anticipo per qualsiasi aiuto, e per favore, chiedo scusa me per il mio pessimo inglese.

+0

2 cose: transitiva è attivata per impostazione predefinita e la dipendenza da un altro progetto dello stesso progetto multi-modulo deve essere specificato in questo modo: 'compilazione del progetto (": projectA") ' – stigkj

+0

Ho una domanda simile, http://stackoverflow.com/questions/29661824/android-aar-dependencies#. Finora non ho potuto farlo funzionare. –

risposta

1

Infine, il problema non è venuto dagli script. Ho appena cancellato la cache di gradle e la cartella di costruzione di ogni progetto, per farlo funzionare.

+1

Abbiamo passato seriamente le ultime 6 ore cercando di farlo funzionare e sono state le cache. Dovrei averlo controllato prima. Grazie! –

1

Inserire la seguente riga nelle dipendenze di projectB.

progetto di compilazione (': projectA')