我的摇篮项目依赖于公共-io的2.4,但摇篮把$ GRADLE_HOME /公地IO-1.4.jar

2019-10-22 11:08发布

我一直迭代在我的第一个摇篮的插件功能。 我下定决心早就知道我需要的commons-io的,所以我增加了一个依赖于commons-io的2.4,是最新的版本。

这已经持续了好一会儿,与构建在命令行工作,并在Eclipse中没有错误。

我刚开始试图整合使用“FileUtils.write(文件,字符串)”一些代码。 之前我没有需要这种方法。 我得到的一切非redded在Eclipse,然后我尝试了命令行构建。

这种失败,像以下错误:

    ... error: cannot find symbol
                FileUtils.write(serviceLoaderFile,
                         ^
  symbol:   method write(File,String)
  location: class FileUtils

这严重地混淆了我。 我去了在Eclipse中失败的线,并表示没有问题。 我导航到“写()”方法,它看上去没什么问题。 然后我跑我的命令行用“--debug”建设得到一些线索。

当我发现了“javac的”行了,我发现,“$ GRADLE_HOME \ LIB \公地IO-1.4.jar”(其中“GRADLE_HOME”只是我的摇篮2.3分布)在类路径在我的依赖罐子。 然后我考察的代码在1.4罐子,我确定,在该版本的“文件实用程序”类没有一个“写”的方法。

那我该怎么办呢?

更新

我想这是有可能我的“依赖性”块将是有益的,这是这样的:

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的,但也似乎没有任何区别。 }

Answer 1:

你可能添加gradleApi()dependencies {}块-见文档 。 问题是,这一切船舶的Gradle依赖需要-包括commons-io 1.4版本-请参见下面的摘录:

[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()



Answer 2:

这个问题的解决需要加入以下块的“sourceSets”块:

main {
    compileClasspath = configurations.compile.minus files("$gradle.gradleHomeDir/lib/commons-io-1.4.jar")
}

这很简单,但我希望有一个更清洁的解决方案这一点。 我不知道那是什么样子。



文章来源: My Gradle project depends on commons-io 2.4, but Gradle puts $GRADLE_HOME/commons-io-1.4.jar into the classpath, causing failures