同一项目中的多个 Scala 版本

Multiple scala versions in the same project

抱歉,如果这是重复的,我在搜索时没有找到 magic 关键字。

我有一个项目,我在其中引入了各种依赖项。其中之一 (jooq) 依赖于 scala 2.10,而我的应用程序依赖于 scala 2.11.x.

尽管一切 "works",我想更好地理解做这样的事情对运行时有什么影响? JVM 将如何解决不同的依赖关系,我会考虑哪些类型的开销?

我正在尝试确定是否值得 fork jooq,并针对 2.11 编译它(假设它会在 2.11 下编译和工作)。

您可能会遇到运行时异常的危险。

由于 Scala 2.10 和 2.11 非常相似,因此危险不像 2.9 到 2.10 或 2.8 到 2.9 那样大,但它仍然存在,如果你想做一些本应是生产代码的事情, 你绝对应该尝试将 jooq 提高到 2.11.

Scala 在主要版本(例如 2.10 到 2.11)之间不是二进制兼容的。这意味着不能保证为 Scala 2.10 编译的库将在使用 2.11 的项目中工作。你可能很幸运它能工作,但我绝对不会依赖这种运气来获得任何重要的代码库。

这就是为什么 Scala 库总是在其名称中包含库版本,以及为什么 SBT 具有特殊的依赖语法以便为所用的 Scala 版本构建正确的库。

附带说明 Martin Odersky (Scalas "father") 在这一年中一直在提出解决这个问题的方法,将中间表示与字节码一起存储,以允许自动重新编译到更新的 Scala 版本。