我正在使用SBT运行Scala 2.11,我遇到了一个问题,即我正在将新导入项目中的一个依赖项与该项目中已经存在的另一项发生冲突,而该冲突恰好由新的人使用。
当我说冲突时,我指的是恰好实现不同接口的不同类。
Guava 19.0(本地lib版本)似乎不适用于Guava 先前提到的依赖项中使用的版本。
解决这个问题的方法是将本地Guava版本更新为26.0-jre。
到目前为止很好,问题已经解决(显然)。
执行完代码检查后,我想对一个新创建的功能进行检查,并确认一切正常,然后通过 build.sbt 文件还原,然后再次返回到Guava 19.0。
我重新启动了该项目,问题不再存在。可能会发生什么?我不应该收到前面提到的问题吗?
我进入.ivy2目录以检查其中的版本,所有版本均为19.0(它们甚至都没有更新为26.0-jre或其中的任何版本)。希望能有所启发。
答案 0 :(得分:1)
这是预期的。下载完成后,它将永远存在(.ivy2
文件夹)中。至于为什么您的项目仍然可以正常运行的原因,仅仅是因为类加载器这次加载了版本26。因此,这取决于您的sbt无法保证的类加载器加载顺序。 Maven也有类似的问题。通常,我们需要使用exclude
来消除此类潜在问题。希望这会有所帮助。
libraryDependencies +=
"log4j" % "log4j" % "1.2.15" exclude("javax.jms", "jms")