【问题标题】:scalac v javac and scala v javascalac v javac 和 scala v java
【发布时间】:2012-02-04 12:10:57
【问题描述】:

所以,我了解 scalac 编译器与 javac 的不同之处 - 查看生成的字节码,它们看起来与 javac 生成的完全不同 - 例如没有构造函数的类。

但是运行时与在类路径中使用 scala jar 启动 java 有什么不同吗?我很确定,但有人可以确认 scala 命令只是 java 的一个薄包装器 - 毕竟他们只是启动了一个 JRE / JDK。

【问题讨论】:

    标签: java scala jar jvm


    【解决方案1】:

    Scala(无论如何在 linux 上)是一个脚本。输入more`which scala`可以看到内容

    你是对的,它基本上是建立一个环境,然后运行 ​​java。

    【讨论】:

    • 这确实有点令人困惑,java 应该正确地称为jvm,因为它会运行任何编译为 java 字节码的代码,无论是什么语言。反之亦然:如果java 命令不会运行代码,那么其他程序也不会运行(除了它包含 JVM 的自定义实现)。
    【解决方案2】:

    scala 命令基本上是一个脚本,它设置类路径,然后在 Java 运行时环境中运行您的代码。

    scala 脚本中的相关行出现在末尾:

    exec "${JAVACMD:=java}" $JAVA_OPTS -cp "$TOOL_CLASSPATH" -Dscala.home="$SCALA_HOME" -Denv.emacs="$EMACS"  scala.tools.nsc.MainGenericRunner  "$@"
    

    基本上,这从java 开始运行MainGenericRunnerMainGenericRunner 然后检查您是否告诉 scala 运行您的 Scala 类之一。如果是这样,它将开始运行。否则,它会启动交互式解释器。

    【讨论】:

    • 我认为只要我有一个混合模式项目,我会坚持在类路径中使用带有 scala jar 的“java”。谢谢。
    • 你添加的代码行有github链接吗?
    【解决方案3】:

    是的;您可以通过直接从java 运行您的scala 应用程序来简单地确认这一点,但在类路径上使用scala-library.jar。它有效 - scala 可执行文件中确实没有没有魔法。这就是我运行所有 scala 应用程序的方式。

    【讨论】:

      猜你喜欢
      • 2013-10-06
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 2020-07-18
      • 2011-07-16
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多