Compiler construction Scala程序是否可以编译为在任何JVM上运行,而不必在给定的机器上安装Scala?

Compiler construction Scala程序是否可以编译为在任何JVM上运行,而不必在给定的机器上安装Scala?,compiler-construction,scala,jvm,Compiler Construction,Scala,Jvm,如果我编写了一个Scala程序,我可以用一种方式编译它,使任何拥有标准Sun Java JVM的人都可以运行它吗?我猜Scala编译器必须在编译的项目中包含Scala特定的API代码?我感兴趣的原因是,我们的课堂项目通常可以用人们喜欢的任何语言交付,但交付的助教通常希望在他们自己的机器或实验室机器上运行代码 是的。如果在类路径中包含适当的scala库jar文件,则可以使用java运行scala程序,因为编译后的scala代码与编译后的java代码相同。在JVM上运行编译后的scala程序不需要做

如果我编写了一个Scala程序,我可以用一种方式编译它,使任何拥有标准Sun Java JVM的人都可以运行它吗?我猜Scala编译器必须在编译的项目中包含Scala特定的API代码?我感兴趣的原因是,我们的课堂项目通常可以用人们喜欢的任何语言交付,但交付的助教通常希望在他们自己的机器或实验室机器上运行代码

是的。如果在类路径中包含适当的scala库jar文件,则可以使用java运行scala程序,因为编译后的scala代码与编译后的java代码相同。

在JVM上运行编译后的scala程序不需要做任何特殊的事。它只是普通的JVM字节码。您需要做的唯一一件事是确保标准Scala库(Scala library.jar)在运行时包含在类路径中。这只是额外的依赖项(或者,如果您在GUI中使用swing包装器,您可能还需要scala-swing.jar)

如果您担心用户的方便,您甚至可以将应用程序打包到单个jar中,使其包含scala-library.jar的内容以及您自己的类和资源。但就我个人而言,只有当这个jar是可执行的(可以作为java-jaryourapplication.jar运行)时,我才会这样做

有关Scala库的说明:

  • 它只提供了一个库。没有解释器、编译器或某种特殊的执行环境;因此,您不应该担心类加载问题
  • 它应该与编译程序时使用的Scala版本相匹配(2.7版和2.8版的Scala库不可互换)
  • 可以在Scala发行版中找到它:lib/Scala-library.jar

  • 如果您曾经使用过任何Java库,只需像对待它们一样对待Scala即可。获取Scala的jar(library one),或者使用可用的程序将其与jar打包在一起,或者一起分发