Sto esponendo uno strano comportamento nella gestione delle dipendenze gradle, dove il progetto A fa riferimento al progetto B come dipendenza di compilazione e al progetto B fa riferimento alla libreria C come dipendenza di runtime. Ora posso utilizzare le classi dalla libreria C nel mio progetto A.gradle include la dipendenza da runtime transitivo come dipendenza di compilazione
La mia domanda: (Perché) si tratta di un bug o di una funzionalità?
Il problema può essere riprodotto con Gradle 2.9 e 2.10 e la seguente configurazione minima:
// settings.gradle
include ':A', ':B'
// build.gradle
allprojects {
apply plugin: 'java'
apply plugin: 'maven'
repositories {
mavenLocal()
mavenCentral()
}
}
project(':A') {
dependencies {
compile project(':B')
}
}
project(':B') {
dependencies {
runtime "org.slf4j:slf4j-log4j12:1.7.13"
}
}
Come si può vedere, un Gradle :A:dependencies
mostra
[...]
compile - Compile classpath for source set 'main'.
\--- project :B
\--- org.slf4j:slf4j-log4j12:1.7.13
+--- org.slf4j:slf4j-api:1.7.13
\--- log4j:log4j:1.2.17
[...]
e l'utilizzo di log4j è totalmente possibile nel codice java che risiede nel progetto A.
Grazie per aver chiesto questo Michael. Il comportamento di gradle in questo caso è totalmente controintuitivo :-( – Peti