Как запустить 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".
Ответы
Ответ 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 при наличии системного пути)