Подтвердить что ты не робот

Как запустить Scala script в IntelliJ IDEA?

Вот тривиальный scala script:

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. Это было намного хуже - тонны вывоза мусора и даже не приблизились к компиляции.

Обновить: похоже, существует более старый, но похожий вопрос:

Как запустить код scala в Intellij Idea 10

Я зашел в Run Configuration и снял флажок "Сделать" в соответствии с инструкциями (это было надоедливо, но пусть будет так).

Однако после внесения этого изменения я получаю другую ошибку:

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 -Library правильно настроен:

enter image description here

enter image description here

Другое обновление (после комментария @lhuang ниже). Я последовал предложению создать другой проект с нуля. В этом случае рабочий лист scala работал правильно (test.sc). Но scala script (который работает при запуске командной строки через "scala test.scala" ) по-прежнему не работает даже в этом совершенно новом проекте "scala".

4b9b3361

Ответ 1

Ответ здесь представляет собой комбинацию элементов:

  • (a) создать новый проект Scala (как это было предложено @lhuang) и
  • (b) при запуске script вам нужно зайти в конфигурацию запуска и удалить шаг "Сделать" (как указано в "связанном" вопросе SOF).

Это показывает грубые грани с Intellij и его плагином Scala. Особенно, когда я хочу интегрировать Scala с java, это, по-видимому, трудно, если даже возможно использовать Intellij в это время (необходимо создать новый проект Scala на частоте), это не стартер для большинства проектов Java, пытающихся включить scala).

Но для scala -первых проектов кажется, что это может быть работоспособным.

Ответ 2

Что работает для меня, это:

  • Напишите Scala script, например. MyScript.scala
  • В меню выберите: Run → Edit Configurations...
  • Нажмите "+" (⌘N также работает на Mac в этом диалоговом окне)
  • Выберите "Scala Script"
  • Затем выберите ваш Script файл в этом диалоговом окне enter image description here

Теперь вы можете запустить script. Это немного неудобно, но это работает.

Примечание. Это работает для меня в IntelliJ IDEA 14.x

Ответ 3

Ваш код работает в командной строке, потому что он "script", когда вы хотите сделать его выполнимым в проекте, есть способы сделать это:

  • Создавая объект, расширяющий приложение

    object test {
        def hi() { print("hi there from here") }
    }
    
    object runnable extends App {
        test.hi()
    }
    
  • или java-подобное решение, т.е. создание основного метода

    object test {
        def hi() { print("hi there from here") }
    }
    
    object runnable {
        def main(args: Array[String]) {
            test.hi()
        }
    }
    
  • когда нужно выполнить как script - я делаю это так: выберите код для выполнения мышью, затем выберите из контекстного меню "Отправить выбор в Scala Консоль"

Ответ 4

Вначале есть две вещи. Scala работает как интерпретатор, так и компилятор. Вы пытаетесь использовать интерпретатор "scala test.scala" без использования "scalac test.scala", а интерпретатор работает также без основного метода.

Другой способ, который вы можете сделать в intellij, - открыть терминал или командную строку в intellij и запустить Scala test.scala из местоположения файла (предварительный параметр - Scala при наличии системного пути)