Can command java run a compiled scala code? If so, why do we have an exclusive command scala?
5 Answers
You can run byte code generated by Scala if you include all necessary runtime libs for Scala (scala-library.jar, scala-swing.jar ...) in the classpath. The scala command does this automatically, and supports Scala specific command line arguments.
4 Comments
java -cp ./scala-reflect-2.11.8.jar:./scala-library-2.11.8.jar HelloWorld This did not work for me.object HelloWorld { def main(args: Array[String]): Unit = { println("Hello, world!") } }scala command the compiler?scala is for running compiled code, the Scala compiler would be scalacYes, it can. Scala is compiled down to Java bytecode. But remember that it depends on the Scala runtime classes, so you need to still have Scala's jar files on the classpath.
If so, why do we have an exclusive command scala?
Convenience wrapper.
2 Comments
Scala is designed to integrate easily with applications that run on modern virtual machines, primarily the Java virtual machine (JVM). The main Scala compiler, scalac, generates Java class files that can be run on the JVM. -> http://www.artima.com/scalazine/articles/steps.html
As long as you have installed the scala runtime you should be fine: compile classes with scalac and run them with java.
Comments
Just want to add my own answer as additional value for the future readers:
scala, if run without parameter, will run an interactive shell
scala, if run with a text file name as parameter, will regard the file as a scala script
those two can't be done using java
1 Comment
If you look closely, the scala command is simply a bash helper-script which summarize to the below command:
$cat /usr/local/Cellar/[email protected]/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 "$@"
There are 2 things required to run a .class file compiled using scalac ( the scala compiler) using the java command.
We need to include the
scala-library.jarand thelocation of the .class filein theclasspath. To find the location ofscala-library.jar, please execute the below:which scala /usr/local/opt/[email protected]/bin/scalaIn my case the
scala-*.jarfiles are in :/usr/local/Cellar/[email protected]/2.11.12_1/idea/libon MacThe location of the
Main2.classfile which is in/training/example1/scala.
So, to execute the program we could use the below command:
java -cp /usr/local/Cellar/[email protected]/2.11.12_1/idea/lib/scala-library.jar:/training/example1/scala/ Main2
EDIT-1: If you are using windows, please use semicolon(;) as the separator in java classpath command.