Как запустить скрипт 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 проектов кажется, что это может быть осуществимо.
Что работает для меня, это:
- Написать скрипт Scala, например, MyScript.scala
- В меню выберите: Run -> Edit Configurations...
- Нажмите "+" (thisN также работает на Mac в этом диалоговом окне)
- Выберите "Scala Script"
- Затем выберите файл Script в этом диалоговом окне.
Теперь вы можете запустить свой скрипт. Это немного неудобно, но это работает.
Примечание: это работает для меня в IntelliJ IDEA 14.x
Ваш код работает в командной строке, потому что это "скрипт", когда вы хотите сделать его работоспособным в проекте, есть способы сделать это:
Создавая объект, который расширяет приложение
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() } }
когда нужно выполнить как скрипт - я делаю это так: выберите код для выполнения мышью, затем выберите из контекстного меню "Отправить выбор в консоль Scala"
Сначала нужно понять две вещи. Scala работает как интерпретатор и компилятор. Вы пытаетесь использовать интерпретатор "scala test.scala" без использования "scalac test.scala", а интерпретатор также работает без основного метода.
Другой способ, который вы можете сделать в intellij, - это открыть терминал или командную строку в intellij и запустить scala test.scala из местоположения файла (предварительным условием является scala в текущем системном пути)