如果这是重复的道歉,我在搜索时没有点击magic关键字。
我有一个项目,我在其中引入各种依赖项。其中一个(jooq)依赖于scala 2.10,而我的应用程序依赖于scala 2.11.x。
虽然所有事情都有效,但我想更好地理解做这样的事情对运行时的影响是什么? JVM将如何解决不同的依赖关系,以及我可以查看哪种类型的开销?
我正在尝试确定是否值得分叉jooq,并将其编译为2.11(假设它将在2.11下编译并工作)。
答案 0 :(得分:6)
Scala在主要版本之间不是二进制兼容的(例如2.10到2.11)。这意味着无法保证为Scala 2.10编译的库将在使用2.11的项目中工作。你可能很幸运,它可以工作,但我绝对不会依赖于任何重要代码库的运气。
这就是为什么Scala库总是在其名称中获得库版本以及为什么SBT具有特殊的依赖语法,以便为所使用的Scala版本获得正确的库构建。
另一方面,Martin Odersky(Scalas"父亲")在这一年中提出了解决这个问题的方法,存储了一个中间表示以及字节代码,以便自动重新编译为更新的Scala版本
答案 1 :(得分:3)
您可能存在运行时异常的危险。
由于Scala 2.10和2.11非常相似,危险并不像2.9到2.10或2.8到2.9那么大但是它仍然存在,如果你想做一些意味着生产代码,你肯定应该尝试将jooq提升到2.11。