3

据我了解,SBT 项目使用安装在您机器上的 JDK(尽管为可能较旧版本的框架进行编译)。换句话说,JDK 作为项目的“环境依赖”被继承;假定它安装在开发者的机器上。

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

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

4

1 回答 1

5

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

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

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

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

于 2013-06-12T07:46:10.900 回答