groovy - 我的Gradle项目取决于commons-io 2.4,但是Gradle将$ GRADLE_HOME/commons-io-1.4.jar放入类路径中,从而导致失败

标签 groovy gradle apache-commons-io

我一直在迭代第一个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.4 jar中的代码,并确定该版本中的“FileUtils”类没有“写入”方法。

我该怎么办?

更新:

我想我的“dependencies”块很有用,这是这样的:
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()块下添加了dependencies {}-请参阅docs。问题是它附带了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()中排除传递依赖。

关于groovy - 我的Gradle项目取决于commons-io 2.4,但是Gradle将$ GRADLE_HOME/commons-io-1.4.jar放入类路径中,从而导致失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29377544/

相关文章:

web-services - 带有Grails的SOAP客户端请求

testRuntime 和 testProvided 之间的 gradle 差异

gradle - 无法获得分类依赖

java - 如何使用Java查找远程Linux机器的磁盘空间

java - 从Java中的文本文件中读取特定行

shell - 如何让 Jenkins 2.0 在与结帐相同的目录中执行 sh 命令?

spring - 在Groovy Bean定义DSL中创建与订单无关的Bean定义

java - 未找到 ID 为 'jacoco' 的插件 + Gradle

java - 我应该关闭 org.apache.commons.io.IOUtils 的 InputStream

windows - 在 Windows 10 64 位上控制台显示的 ANSI 编码时登录异常