为什么JDK假设是预先安装但不是sbt中的Scala?

时间:2013-06-11 22:00:31

标签: scala sbt

据我了解,SBT项目使用您机器上安装的JDK(虽然可以编译可能较旧版本的框架)。换句话说,JDK作为项目的“环境依赖”继承;假设它安装在开发人员的机器上。

但是,Scala lib / compiler / etc的特定版本被视为普通依赖项。它们是为您的项目下载的IE(尽管最终由SBT缓存以用于其他项目,如果它们需要相同的版本)。

我的问题是:为什么SBT项目不像JDK那样使用环境的Scala安装,而不是下载自己的副本?

1 个答案:

答案 0 :(得分:5)

在JVM上运行的应用程序不能只将Java库作为常规依赖项。

换句话说,您不只是通过示例添加java-1.7.jar依赖项。这是因为给定版本的Java库jar只能用于JVM的给定实现。将java库本身作为依赖项本质上会使您的应用程序只能在给定的JVM实现中运行(这也可能意味着“在给定的操作系统上”),完全违背了Java's "Write once, run anywhere"的目的。

另一方面,Scala库仅依赖于标准Java库本身,它已由主机JVM提供。因此,它可以作为标准依赖项添加。如果可以的话,为什么在最终用户需要在他的机器上安装Scala才能运行任何Scala程序之前,你为什么要交换这种简单的情况呢?

在某些情况下,这可能会很好(有时甚至可能是可取的),但很容易看出部署方案会出现多少问题。