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

Law*_*eld 3 scala sbt

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

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

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

Rég*_*les 5

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

换句话说,您不只是java-1.7.jar通过示例添加依赖项.这是因为给定版本的Java库jar只能用于JVM的给定实现.将java库本身作为依赖项本质上会使您的应用程序仅在给定的JVM实现(可能也意味着"在给定的OS上")上运行,完全违背了Java的"一次编写,随处运行"的目的.

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

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