【问题标题】:How to run a Scala script within IntelliJ IDEA?如何在 IntelliJ IDEA 中运行 Scala 脚本?
【发布时间】:2013-11-20 04:03:55
【问题描述】:

这是一个简单的 scala 脚本:

object test {
  def hi() { print("hi there from here") }
}


test.hi()

从命令行执行预期:

scala /shared/scaladem/src/main/scala/test.scala
Loading /shared/scaladem/src/main/scala/test.scala...
defined module test
hi there from here
Welcome to Scala version 2.10.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_65).
Type in expressions to have them evaluated.
Type :help for more information.

scala>

但在 Intellij 中会出现编译错误。右键|运行 test.scala

expected class or object definition
test.hi()
^

顺便说一句,我也尝试作为 scala 工作表运行。那更糟糕 - 大量的垃圾输出,甚至没有接近编译。

更新:似乎有一个较旧但类似的问题:

How to run Scala code in Intellij Idea 10

我进入运行配置并按照指示取消选中“制作”(这很麻烦,但就这样吧..)

但是在进行更改后,我得到了一个不同的错误:

Exception in thread "main" java.lang.NoClassDefFoundError: scala/Either
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:190)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:113)
Caused by: java.lang.ClassNotFoundException: scala.Either
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 3 more

注意:Scala 库已正确设置:

另一个更新(在下面@lhuang 的评论之后) 我按照建议从头开始创建另一个项目。在这种情况下,Scala 工作表可以正常工作(test.sc)。但是,即使在这个全新的“scala”项目中,scala 脚本(通过 "scala test.scala" 运行命令行时有效)仍然工作。

【问题讨论】:

  • 它应该在 Scala 工作表中工作。你能尝试创建一个新的干净的 Scala 并使用 Scala 主配置吗?
  • @lhuang。 “一个新的干净的 Scala”是什么意思?
  • 我的意思是你可以尝试创建一个新的 Scala 项目。
  • @lhuang 你说得对。创建新的 scala 项目然后在 Worksheet 中运行可以正常工作。麻烦的是,通常需要“您必须创建一个新的 Scala 项目”才能让所有 scala 正常工作。它还创建 561 BLANK LINES,不知道为什么。
  • 是的,创建一个新的 Scala 项目不应该是解决方案。但是,大多数情况下,这种错误是由一些无效的配置引起的。我们很难弄清楚在哪里。现在,您可以让它在一个干净的项目中工作。这样您就可以比较这两个项目,以了解之前的项目发生了什么。

标签: scala intellij-idea


【解决方案1】:

这里的答案是项目的组合:

  • (a) 创建一个全新的 Scala 项目(由@lhuang 建议)和
  • (b) 运行脚本时,您需要进入运行配置并删除 Make 步骤(如“相关”SOF 问题中所述)。

这显示了 Intellij 及其 scala 插件的粗糙边缘。尤其是当我想将 scala 与 java 集成时,此时即使可能使用 Intellij 显然也很困难(需要频繁创建新的 Scala 项目对于大多数尝试合并 scala 的 java 项目来说是不可行的)。

但对于 scala-first 项目,这似乎可行。

【讨论】:

    【解决方案2】:

    对我有用的是:

    1. 编写一个 Scala 脚本,例如MyScript.scala
    2. 在菜单中选择:运行 -> 编辑配置...
    3. 按“+”(⌘N 在此对话框中也适用于 Mac)
    4. 选择“Scala 脚本”
    5. 然后在此对话框中选择您的脚本文件

    现在您可以运行您的脚本了。 这有点不方便,但它确实有效。

    注意:这适用于 IntelliJ IDEA 14.x

    【讨论】:

    • 我试过这个但得到Scala script not found 错误!这很奇怪,因为我可以看到该文件并使用Edit Configuration 的文件选择器选择了它。知道我可能做错了什么吗?
    • 我发现了一个有趣的观察结果。你能检查一下这个stackoverflow.com/questions/54270601/…
    • 抱歉,Manu Chadha 派对迟到了,我刚刚看到你的评论。很高兴您的帖子中已经有了一个答案。一个非常好的而且很长的答案...我喜欢这里的用户的 StackOverflow :-)
    【解决方案3】:

    您的代码可以在命令行中运行,因为它是“脚本”,当您想让它在项目中运行时,有方法可以做到

    1. 通过创建扩展 App 的对象

      object test {
          def hi() { print("hi there from here") }
      }
      
      object runnable extends App {
          test.hi()
      }
      
    2. 或类似 java 的解决方案,即创建 main 方法

      object test {
          def hi() { print("hi there from here") }
      }
      
      object runnable {
          def main(args: Array[String]) {
              test.hi()
          }
      }
      
    3. 当需要作为脚本执行时 - 我这样做: 选择要通过鼠标执行的代码,然后从上下文菜单中选择“将选择发送到 Scala 控制台”

    【讨论】:

    • -1 重点是能够在不更改脚本的情况下在 IJ 中运行脚本。您的回答没有解决 OP。
    • 作者使用了关键字“脚本”、“编译”,所以我给出了编译的提示。如果有人想将脚本作为脚本执行,我会按照帖子中的说明进行操作(已编辑 - 添加了有关脚本的信息)
    • 您的回答与文字和意图都大不相同。 OP 要求能够从运行配置中运行它。如果您想通过鼠标进行选择,则完全不同。 JetBrains 人员将此视为错误并为其创建了 JIRA - 因此尝试以这种方式回答是不准确的。
    • 我很高兴阅读您的指南。是的,答案与这些关键字有很大不同,但是编译脚本是什么意思?在我看来,它寻找初学者的问题(运行简单的代码),我试图提供帮助,我认为这对使用插件启动 Scala 的人会有所帮助。
    • 这里的问题是您心中有一个答案——无论实际问题如何,您都想使用它。谚语:如果你有一把锤子,那么每个问题看起来都像钉子。这个问题不是关于“我如何在 intellij 中使用 scala”。对于该特定问题,已经有一个被接受和赞成的答案。
    【解决方案4】:

    首先要了解两件事。 Scala 既是解释器又是编译器。您正在尝试使用解释器“scala test.scala”而不使用“scalac test.scala”,并且解释器也可以在没有 main 方法的情况下工作。

    您可以在 intellij 中执行的其他方法是在 intellij 中打开终端或命令提示符,然后从文件位置运行 scala test.scala(前提是 scala 在当前系统路径中)

    【讨论】:

    • Umm intellij 可能是目前最强大的 Scala IDE。它确实支持 scala 脚本(在解释模式下)。您对解释器与编译器的评论是我在 2010 年 10 月使用 scala 的第一天就知道的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多