2015-03-02 39 views
2

如果这是重复的道歉,我没有在搜索时点击magic关键字。同一个项目中的多个scala版本

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

尽管一切都“有效”,但我想更好地理解做这样的事情会产生什么样的运行时间影响? JVM如何解决不同的依赖关系,以及我可以查看哪种类型的开销?

我想确定是否值得fork jooq,并将其编译为2.11(假设它将在2.11下编译和工作)。

回答

6

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

这就是为什么Scala图书馆始终在其名称中包含库版本的原因,以及为什么SBT获得特殊的依赖关系语法以获得所用Scala版本的正确库构建。

在旁注中Martin Odersky(斯卡拉“父亲”)在这一年中一直提出解决这个问题的方案,存储中间表示和字节码,以便自动重新编译为新的Scala版本。

+1

谢谢。在相关的说明中,是否还有对小版本的考虑(例如2.11.4至2.11.5)?这将需要很多猫放牧,以保持版本内联的小版本。 – 2015-03-02 20:38:10

+0

曾经在2.10之前。 – 2015-03-03 06:48:50

3

您可能有运行时异常的危险。

由于Scala 2.10和2.11非常相似,所以危险并没有像2.9到2.10或2.8到2.9那么大,但它仍然存在,如果你想做一些本意是生产代码的东西,你肯定应该试着将jooq提高到2.11。

+0

[这肯定应该由jOOQ覆盖](https://github.com/jOOQ/jOOQ/issues/4111) – 2015-03-03 10:22:49

相关问题