【发布时间】:2016-01-28 16:06:51
【问题描述】:
我在 gradle 依赖管理中遇到了一个奇怪的行为,其中项目 A 将项目 B 引用为编译依赖项,而项目 B 将库 C 引用为运行时依赖项。现在我可以在我的项目 A 中使用库 C 中的类了。
我的问题:(为什么)这是错误还是功能?
可以使用 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 中的 java 代码中使用 log4j 是完全可能的。
【问题讨论】:
-
感谢迈克尔的提问。在这种情况下 gradle 的行为是完全违反直觉的 :-(
标签: java gradle dependency-management