簡體   English   中英

java可以運行編譯好的scala代碼嗎?

[英]Can java run a compiled scala code?

命令java可以運行已編譯的 Scala 代碼嗎? 如果是這樣,為什么我們有一個獨占命令scala

如果在類路徑中包含 Scala 的所有必要運行時庫(scala-library.jar、scala-swing.jar ...),則可以運行由 Scala 生成的字節碼。 scala 命令會自動執行此操作,並支持 Scala 特定的命令行參數。

是的,它可以。 Scala 被編譯成 Java 字節碼。 但是請記住,它依賴於 Scala 運行時類,因此您仍然需要在類路徑上保留 Scala 的 jar 文件。

如果是這樣,為什么我們有一個獨占命令 scala?

方便包裝。

Scala 旨在與在現代虛擬機(主要是 Java 虛擬機 (JVM))上運行的應用程序輕松集成。 主要的 Scala 編譯器 scalac 生成可以在 JVM 上運行的 Java 類文件。 -> http://www.artima.com/scalazine/articles/steps.html

只要您安裝了 scala 運行時,您就應該沒問題:使用scalac編譯類並使用java運行它們。

只想添加我自己的答案作為未來讀者的附加價值:

scala,如果不帶參數運行,將運行交互式 shell

scala,如果以文本文件名作為參數運行,則會將該文件視為scala腳本

這兩個不能用java來完成

如果仔細觀察, 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命令運行使用scalac (scala 編譯器)編譯的.class文件需要兩件事。

  1. 我們需要在classpath包含scala-library.jarlocation of the .class filelocation of the .class file 要找到scala-library.jar的位置,請執行以下命令:

    which scala /usr/local/opt/scala@2.11/bin/scala

    就我而言, scala-*.jar文件位於:Mac 上的/usr/local/Cellar/scala@2.11/2.11.12_1/idea/lib

  2. Main2.class文件在/training/example1/scala

因此,要執行該程序,我們可以使用以下命令:

java -cp /usr/local/Cellar/scala@2.11/2.11.12_1/idea/lib/scala-library.jar:/training/example1/scala/ Main2

EDIT-1:如果您使用的是windows,請在java classpath 命令中使用分號(;) 作為分隔符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM