据我了解,SBT项目使用您机器上安装的JDK(虽然可以编译可能较旧版本的框架)。换句话说,JDK作为项目的“环境依赖”继承;假设它安装在开发人员的机器上。
但是,Scala lib / compiler / etc的特定版本被视为普通依赖项。它们是为您的项目下载的IE(尽管最终由SBT缓存以用于其他项目,如果它们需要相同的版本)。
我的问题是:为什么SBT项目不像JDK那样使用环境的Scala安装,而不是下载自己的副本?
答案 0 :(得分:5)
在JVM上运行的应用程序不能只将Java库作为常规依赖项。
换句话说,您不只是通过示例添加java-1.7.jar
依赖项。这是因为给定版本的Java库jar只能用于JVM的给定实现。将java库本身作为依赖项本质上会使您的应用程序只能在给定的JVM实现中运行(这也可能意味着“在给定的操作系统上”),完全违背了Java's "Write once, run anywhere"的目的。
另一方面,Scala库仅依赖于标准Java库本身,它已由主机JVM提供。因此,它可以作为标准依赖项添加。如果可以的话,为什么在最终用户需要在他的机器上安装Scala才能运行任何Scala程序之前,你为什么要交换这种简单的情况呢?
在某些情况下,这可能会很好(有时甚至可能是可取的),但很容易看出部署方案会出现多少问题。