我在gradle依赖管理中遇到了奇怪的行为,项目A将项目B作为编译时依赖,而项目B将库C作为运行时依赖。现在我可以在项目A中使用库C的类。
我的问题是:这是一个bug还是一个特性?
可以使用gradle 2.9和2.10以及以下最小设置来复制该问题:
// 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"
}
}
正如您所看到的,gradle :A:dependencies
显示了以下内容:
[...]
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
[...]
在项目A中使用log4j完全可以在java代码中实现。