scala - 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 或那里的任何东西)。希望能有所启发。
解决方案
这是意料之中的。下载后,它将永远存在(.ivy2
文件夹)。至于为什么你的项目仍然可以正常工作,只是因为类加载器这次加载了 26 版。所以这取决于你的 sbt 不能保证的类加载器加载顺序。Maven也有类似的问题。通常,我们需要使用exclude
来消除这种潜在的问题。希望这能有所帮助。
libraryDependencies +=
"log4j" % "log4j" % "1.2.15" exclude("javax.jms", "jms")
推荐阅读
- openedge - 将 XML 数据导入 Temp-Table in Progress 4GL/OpenEdge ABL
- php - 检查日期是否大于字符串
- c# - 在 Xamarin 自动化 UI 测试中按索引从 ListView 获取元素
- google-apps-script - 是否有自定义函数或脚本可以返回 Google 表格中特定表格的 gid?
- flutter - 如何在没有构建器的情况下将 Dart 模型类转换为列表?
- django - UndefinedError: 'url_for' 未定义;在 Django 中使用 Jinja2
- jsf - 如何在 blockUI 处于活动状态时禁用 p:defaultCommand?
- powershell - awk 从 bash 到 PowerShell
- react-native - 如何在 React Native 调试器中更改字体粗细?
- node.js - Nodejs,如何在返回 Promise 的异步迭代之间延迟执行