java可以运行编译的scala代码吗?
commandjava可以运行编译的scala代码吗?,java,scala,Java,Scala,commandjava可以运行编译的scala代码吗?如果是这样,为什么我们有一个独占的命令scala Scala设计为易于集成 使用在modern上运行的应用程序 虚拟机,主要是Java 虚拟机(JVM)。主斯卡拉 编译器scalac生成Java类 可以在JVM上运行的文件。 -> 只要您已经安装了scala运行时,您就应该可以了:使用scalac编译类,并使用java运行它们,如果您在类路径中包含所有必要的scala运行时库(scala-library.jar,scala-swing.jar
java
可以运行编译的scala代码吗?如果是这样,为什么我们有一个独占的命令scala
Scala设计为易于集成
使用在modern上运行的应用程序
虚拟机,主要是Java
虚拟机(JVM)。主斯卡拉
编译器scalac生成Java类
可以在JVM上运行的文件。
->
只要您已经安装了scala运行时,您就应该可以了:使用
scalac
编译类,并使用java
运行它们,如果您在类路径中包含所有必要的scala运行时库(scala-library.jar,scala-swing.jar…),您就可以运行scala生成的字节码。scala命令自动执行此操作,并支持scala特定的命令行参数。是的,它可以。Scala被编译成Java字节码。但请记住,这取决于Scala运行时类,因此类路径上仍然需要有Scala的jar文件
如果是这样,为什么我们有一个独占的命令scala
方便包装。只想添加我自己的答案,作为未来读者的附加值: scala如果不带参数运行,将运行一个交互式shell 如果以文本文件名作为参数运行scala,则会将该文件视为scala脚本
如果仔细观察,
scala
命令只是一个bash助手脚本,它总结为以下命令:
$cat /usr/local/Cellar/scala@2.11/2.11.12_1/libexec/bin/scala
execCommand \
"${JAVACMD:=java}" \
$JAVA_OPTS \
"${java_args[@]}" \
"${classpath_args[@]}" \
-Dscala.home="$SCALA_HOME" \
$OVERRIDE_USEJAVACP \
"$EMACS_OPT" \
$WINDOWS_OPT \
scala.tools.nsc.MainGenericRunner "$@"
java -cp /usr/local/Cellar/scala@2.11/2.11.12_1/idea/lib/scala-library.jar:/training/example1/scala/ Main2
使用java
命令运行使用scalac
(scala编译器)编译的.class
文件需要两件事
classpath
中包含scala library.jar
和.class文件的位置。要查找scala library.jar的位置,请执行
下:
哪个scala/usr/local/opt/scala@2.11/bin/scala
在我的例子中,scala-*.jar
文件位于:
/usr/local/cell/scala@2.11/2.11.12_1/idea/lib
在Mac上
/training/example1/scala
中的Main2.class
文件的位置
$cat /usr/local/Cellar/scala@2.11/2.11.12_1/libexec/bin/scala
execCommand \
"${JAVACMD:=java}" \
$JAVA_OPTS \
"${java_args[@]}" \
"${classpath_args[@]}" \
-Dscala.home="$SCALA_HOME" \
$OVERRIDE_USEJAVACP \
"$EMACS_OPT" \
$WINDOWS_OPT \
scala.tools.nsc.MainGenericRunner "$@"
java -cp /usr/local/Cellar/scala@2.11/2.11.12_1/idea/lib/scala-library.jar:/training/example1/scala/ Main2
编辑-1:如果您使用的是windows,请在java类路径命令中使用分号(;)作为分隔符。scala是解释器,而scalac是编译器。。这不仅是为了方便,也是一种不同的技术。您也可以启动编译器——它只是需要运行的另一个类(scala.tools.nsc.Main,带有适当的参数)。但是方便是方便的,那么为什么要这么做呢?这两种方法都可以做到,但做起来特别烦人——你必须调用scala.tools.nsc.maingerirunner并确保在类路径中有合适的工具。为什么不让scala脚本帮你做呢?
java-cp./scala-reflect-2.11.8.jar:./scala-library-2.11.8.jar HelloWorld
这对我不起作用。我的HelloWorld程序就是这个对象HelloWorld{def main(args:Array[String]):Unit={println(“hello,world!”}
谢谢。什么是“scala命令”?scala
命令是编译器吗?@Timscala
用于运行编译后的代码,scala编译器应该是scalac