首页 > 解决方案 > SBT 没有删除以前下载的版本

问题描述

我正在使用 SBT 运行 Scala 2.11,我遇到了一个问题,我将新导入到我的项目中的依赖项与项目中已经存在的另一个依赖项发生冲突,而该依赖项恰好被新的依赖项使用。

当我说冲突时,我指的是碰巧实现不同接口的不同类。

Guava 19.0(本地 lib 版本)似乎不适用于前面提到的依赖项中使用的 Guava 版本。

而我为解决这个问题所做的就是将本地 Guava 版本更新为 26.0-jre。

到目前为止一切顺利,问题已解决(显然)。

在执行我想要为新创建的功能执行的代码检查并看到一切正常后,我通过build.sbt文件恢复并再次回到 Guava 19.0。

我重新启动该项目,问题不再存在。会发生什么?我不应该得到前面提到的问题吗?

我进入 .ivy2 目录检查那里的版本,所有这些都是 19.0(它们甚至没有更新到 26.0-jre 或那里的任何东西)。希望能有所启发。

标签: scalasbt

解决方案


这是意料之中的。下载后,它将永远存在(.ivy2文件夹)。至于为什么你的项目仍然可以正常工作,只是因为类加载器这次加载了 26 版。所以这取决于你的 sbt 不能保证的类加载器加载顺序。Maven也有类似的问题。通常,我们需要使用exclude来消除这种潜在的问题。希望这能有所帮助。

libraryDependencies += "log4j" % "log4j" % "1.2.15" exclude("javax.jms", "jms")


推荐阅读