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

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

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

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

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

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

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 test.scala") все еще не работает, даже в этом совершенно новом проекте "scala".

4 ответа

Решение

Ответ здесь - комбинация пунктов:

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

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

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

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

  1. Написать скрипт Scala, например, MyScript.scala
  2. В меню выберите: Run -> Edit Configurations...
  3. Нажмите "+" (thisN также работает на Mac в этом диалоговом окне)
  4. Выберите "Scala Script"
  5. Затем выберите файл Script в этом диалоговом окне. введите описание изображения здесь

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

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

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

  1. Создавая объект, который расширяет приложение

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

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

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

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

Другие вопросы по тегам