Groovy 我的Gradle项目依赖于commons io 2.4,但Gradle将$Gradle_HOME/commons-io-1.4.jar放入类路径,导致失败

Groovy 我的Gradle项目依赖于commons io 2.4,但Gradle将$Gradle_HOME/commons-io-1.4.jar放入类路径,导致失败,groovy,gradle,apache-commons-io,Groovy,Gradle,Apache Commons Io,我一直在重复我的第一个Gradle插件中的功能。我很早就确定我需要commons io,所以我添加了对commons io 2.4的依赖,这是最新版本 这已经进行了一段时间了,构建是从命令行运行的,Eclipse中没有错误 我刚开始尝试集成一些使用“FileUtils.write(File,String)”的代码。我以前不需要那种方法。我在Eclipse中对所有内容进行了卸载,然后尝试了命令行构建 此操作失败,错误如下: ... error: cannot find symbol

我一直在重复我的第一个Gradle插件中的功能。我很早就确定我需要commons io,所以我添加了对commons io 2.4的依赖,这是最新版本

这已经进行了一段时间了,构建是从命令行运行的,Eclipse中没有错误

我刚开始尝试集成一些使用“FileUtils.write(File,String)”的代码。我以前不需要那种方法。我在Eclipse中对所有内容进行了卸载,然后尝试了命令行构建

此操作失败,错误如下:

    ... error: cannot find symbol
                FileUtils.write(serviceLoaderFile,
                         ^
  symbol:   method write(File,String)
  location: class FileUtils
这让我很困惑。我查看了Eclipse中的失败行,没有发现任何问题。我导航到了“write()”方法,它看起来很好。然后,我使用“-debug”运行命令行构建以获得一些线索

当我找到“javac”行时,我发现“$GRADLE_HOME\lib\commons-io-1.4.jar”(其中“GRADLE_HOME”只是我的GRADLE 2.3发行版)在依赖项jar之前的类路径中。然后,我检查了1.4jar中的代码,确定该版本中的“FileUtils”类没有“write”方法

我该怎么办

更新

我想我的“依赖项”块可能会有用,这是:

dependencies {
  compile ("org.codehaus.groovy:groovy-all:2.3.9")
  compile gradleApi()
  compile "org.opendaylight.yangtools:yang-parser-impl:0.7.0-SNAPSHOT"
  compile "org.opendaylight.yangtools:binding-java-api-generator:0.7.0-SNAPSHOT"
  compile "org.opendaylight.yangtools:binding-generator-api:0.7.0-SNAPSHOT"
  compile "org.opendaylight.yangtools:binding-generator-impl:0.7.0-SNAPSHOT"
  compile "org.opendaylight.controller:yang-jmx-generator:0.3.0-SNAPSHOT"
  compile "commons-io:commons-io:2.4"

  testCompile("org.spockframework:spock-core:1.0-groovy-2.3") {
    exclude group: "org.codehaus.groovy"
  }
我试着注释掉“gradleApi”的引用,但没有效果。我还尝试为commons io添加一个与“groovy all”引用关联的“exclude”,但这似乎也并没有什么区别。
}

您可能在
依赖项{}
块下添加了
gradleApi()
-请参阅。问题是它提供了gradle所需的所有依赖项—包括1.4版中的
commons io
—请参阅以下摘录:

[opal@opal-mac-2]~/.gvm/gradle/current/lib % pwd
/Users/opal/.gvm/gradle/current/lib
[opal@opal-mac-2]~/.gvm/gradle/current/lib % ll commons-io-1.4.jar 
-rw-rw-r--  1 opal  staff  109043 23 gru 13:17 commons-io-1.4.jar
[opal@opal-mac-2]~/.gvm/gradle/current/lib % 
您可能单独添加了版本2.4,这就是冲突发生的原因。你也可以跑步

gradle dependencies
查看完整的依赖关系树并验证问题


无法从
gradleApi()

中排除可传递依赖项。解决此问题需要将以下块添加到“sourceset”块中:


这很简单,但我希望有一个更干净的解决方案。我不确定那会是什么样子。

正如我在与您的答案同时进行的更新中所指出的,我认为这可能是问题所在,但当我把它注释掉时,它没有什么区别。为了以防万一,我尝试了“gradle dependencies”,以查看是否有任何其他对commons io 1.4的意外引用,但没有,只有我对2.4的一次引用。它可能被缓存-尝试删除
.gradle
文件夹。如果没有
gradleApi()
,您可能无法提供插件。请参阅更新的答案。@DavidM.Karr-听起来很奇怪。它必须被缓存在某个地方。它在命令行和eclipse上失败了吗?只是在命令行上失败了。日食没有显示红色标记。
main {
    compileClasspath = configurations.compile.minus files("$gradle.gradleHomeDir/lib/commons-io-1.4.jar")
}