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.
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
Ho una domanda simile, http://stackoverflow.com/questions/29661824/android-aar-dependencies#. Finora non ho potuto farlo funzionare. –