Java 对于commons cli,gradle使用其自己的依赖项而不是build.gradle

Java 对于commons cli,gradle使用其自己的依赖项而不是build.gradle,java,gradle,Java,Gradle,我的项目未编译,因为我已将build.gradle配置为使用commons-cli-1.3,而gradle使用commons-cli-1.2: compile 'commons-cli:commons-cli:1.3' 如果我正确执行了dependency insight,则会显示我的期望: commons-cli:commons-cli:1.3 \--- compile 但是,如果我检查configurations.compile.asPath,我会在commons-cli-1.3.jar

我的项目未编译,因为我已将build.gradle配置为使用commons-cli-1.3,而gradle使用commons-cli-1.2:

compile 'commons-cli:commons-cli:1.3'
如果我正确执行了dependency insight,则会显示我的期望:

commons-cli:commons-cli:1.3
\--- compile
但是,如果我检查configurations.compile.asPath,我会在commons-cli-1.3.jar之前的路径上看到lib/plugins/commons-cli-1.2.jar

这似乎是因为我的项目依赖于一个项目,该项目具有compile dependency gradleApi()-它使用1.2.jar(未在dependencyInsight中报告)

我至少在Gradle2.3和2.7中看到了这种情况

有人遇到这个问题并有解决办法吗?
gradle的行为看起来相当垃圾和不透明,所以,以下是我为解决这个问题所做的,在我的案例中。。。 我没有在其他项目依赖项中使用gradleApi(),而是显式添加了以下内容:

compile 'org.gradle:gradle-core:2.6'
compile 'org.codehaus.groovy:groovy-all:2.4.5'
即使这没有解决我的问题(它确实解决了),这也会使这些依赖项更容易查看/管理,例如添加{exclude:}子句等。我想gradleApi()只是一个可怕的“便利”特性(请参阅长期存在的bug:)