Как использовать Scala в IntelliJ IDEA (или: почему так сложно получить рабочую среду IDE для Scala)?

Недавно я отказался от попыток использовать Scala в Eclipse (основные вещи, такие как завершение, не работают). Итак, теперь я пробую IntelliJ. Я не уйду очень далеко.

Я мог редактировать программы (с подсветкой и завершением синтаксиса ... ура!). Но я не могу запустить даже самый простой "Hello World". Это была исходная ошибка:

Scala signature Predef has wrong version
Expected 5.0
found: 4.1 in .... scala-library.jar

Но это было вчера с IDEA 9.0.1. См. ниже...

ОБНОВЛЕНИЕ

Сегодня я удалил IntelliJ 9.0.1 и установил 9.0.2 Early Availability со стабильной версией 4/14 подключаемого модуля Scala.

Затем я настраиваю проект с нуля с помощью мастеров:

  • новый проект с нуля
  • JDK - это 1.6.u20
  • принять значение по умолчанию (проект) вместо global / module
  • принять загрузку Scala 2.8.0beta1 в папку lib проекта

Создан новый класс:

object hello {
  def main(args: Array[String]) {
    println("hello: " + args);
  }
}

Из-за моих усилий у меня теперь совершенно новая ошибка :)

Вот:

Внутренняя ошибка Scalac: класс java.lang.ClassNotFoundException [java.net.URLClassLoader $ 1.run (URLClassLoader.java:202), java.security.AccessController.doPrivileged (собственный метод), java.net.URLClassLoader.findClass (URLClassLoader.findClass (URLClassLoader.findClass) : 190), java.lang.ClassLoader.loadClass (ClassLoader.java:307), sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:301), java.lang.ClassLoader.loadClass (ClassLoader.java:248) , java.lang.Class.forName0 (собственный метод), java.lang.Class.forName (Class.java:169), org.jetbrains.plugins.scala.compiler.rt.ScalacRunner.main (ScalacRunner.java:72) ]

ОКОНЧАТЕЛЬНОЕ ОБНОВЛЕНИЕ

Я удалил 9.0.2 EA и переустановил 9.0.1, но на этот раз я использовал версию Scala 2.7.3, а не версию 2.7.6 по умолчанию, потому что 2.7.3 - это тот, который показан на снимках экрана на веб-сайте IntelliJ ( Думаю, скриншоты доказывают, что именно эту версию тестировали!). Теперь все работает !!!


person Alex R    schedule 19.04.2010    source источник
comment
Вы добавили jar-файлы компилятора Scala и библиотек в зависимости проекта?   -  person ziggystar    schedule 20.04.2010
comment
Была аналогичная проблема, но в моем случае это было из-за объявления пакета в верхней части файла   -  person Adam Bergmark    schedule 12.10.2011
comment
Сейчас все изменилось, и Idea, и Scala. Идея теперь имеет интеграцию SBT. Все ответы сейчас неактуальны, и все это стало проще.   -  person Display Name    schedule 08.06.2015


Ответы (9)


Я столкнулся с такой же скалярной ошибкой при попытке запустить проект Scala в Intellij Idea 9.0.2, и мне удалось найти решение случайно :). Это шаги, которые я предпринял при создании проекта и его запуске.

Я создал проект Scala в финальной версии Intellij Idea 9.0.2 (он был выпущен сегодня). Я установил подключаемый модуль Scala, перезапустил среду IDE и создал новый проект Scala (с именем «TestScala») с scala-2.8.0.Beta1 в качестве библиотеки проекта. После создания проекта и загрузки библиотек scala я создал файл Test.scala со следующим содержимым:

object Test  {
 def main(args:Array[String]){
   println("hello")
 }
}

После этого я создал конфигурацию запуска («Редактировать конфигурации»), выбрав шаблон «Приложение». Я устанавливаю в качестве основного класса Test и выбираю имя проекта («TestScala») в поле со списком «Использовать путь к классам и JDK модуля». Когда я запускаю конфигурацию, я получаю ту же ошибку, о которой вы сообщили («Внутренняя ошибка Scalac: класс java.lang.ClassNotFoundException»).

А теперь самое странное :). Я щелкаю проект правой кнопкой мыши, выбираю «Настройки модуля», просматриваю все настройки, но я ничего не меняю. Нажмите «Применить» и «ОК», попробуйте снова запустить конфигурацию, и все работает :).

Я использую финальную версию Intellij Idea 9.0.2 (сборка 95-66); Ubuntu 9.10 и JDK 1.6.0_18. Я также должен упомянуть, что у меня был настроен JDK в Intellij, иначе есть дополнительный шаг для его настройки.

ОБНОВЛЕНИЕ:

При проверке настройки модуля необходимо щелкнуть Модуль-> Scala и Фасеты-> Scala (разверните его и щелкните Scala (ProjectName)). Обе эти настройки относятся к компилятору scala и расположению библиотеки scala. Я предполагаю, что эти значения не установлены должным образом при создании проекта, но сохраняются, когда пользователь касается их и сохраняет настройки.

person Andrei Oprisan    schedule 22.04.2010
comment
Спасибо! Это согласуется с тем, что я наблюдал, но не было сразу очевидным, пока я не увидел ваш ответ! - person Alex R; 23.04.2010
comment
МОЙ БОГ! Большое спасибо за эту подсказку! Сэкономил много-много хлопот! :) - person Malax; 21.05.2010
comment
Гений. Спасибо, и я обвиню разработчиков IntelliJ в следующий раз. - person Alexander Temerev; 29.05.2010

Чтобы ответить на ваш вопрос, сложно получить рабочую среду IDE для Scala по двум причинам: (а) Scala только начинает достигать широкой аудитории и (б) из-за (а) нет экономического обоснования, чтобы тратить время на Scala IDE.

Кроме того, если вы достаточно взрослые, чтобы вспомнить, и достаточно молоды, чтобы все еще помнить, вы должны знать, что в течение первых пяти или более лет Java мы застряли в хороших инструментах, таких как JBuilder, которые сделали немного больше, чем скомпилировали ваш код, когда вы так сказали - без выделения ошибок, без автоматического импорта и слова «рефакторинг» даже не существовало. Если вы хотите стать пионером, вам нужно быть готовым самому срезать часть дороги или, по крайней мере, срезать кусты.

Я знаю, что это вам не поможет, но я успешно использовал IDEA для Scala в Linux, Mac и Windows. Обычно у меня есть Scala SDK, установленный где-то локально, и я указываю на это IDEA, а не использую опцию «скачать».

В настоящее время я в основном использую EAP-версию IDEA 9 на Mac OS X с Scala 2.8.0.Beta1-RC5, и он работает хорошо (за исключением того, что fsc, похоже, не работает со смешанными источниками).

Вы можете попытать счастья на форуме обсуждения подключаемого модуля IDEA Scala, хотя я не На мои публикации там не было много откликов.

person Graham Lea    schedule 20.04.2010

Обязательным условием является установка плагина.

Следующее, что вам нужно сделать, это определить библиотеку (глобальную или специфичную для проекта; я использую глобальную), которая содержит файлы JAR библиотеки Scala и компилятора (как минимум scala-compiler.jar и scala-library.jar). Добавление исходных JAR-файлов и JAR-файлов документации или URL-адресов также является хорошей идеей. Затем сделайте эту библиотеку зависимой от любых модулей в вашем проекте, которые включают код Scala.

Наконец, найдите фасеты Scala в этих модулях и снимите там оба флажка.

person Randall Schulz    schedule 20.04.2010

Я только что сделал новую установку и у меня была точно такая же проблема. Оказалось, что, поскольку я создал файл в корневом пакете, IDEA добавила вверху оператор пакета с именем пакета. Я предполагаю, что это затем было скомпилировано как «объект пакета Main» - действительный синтаксис в 2.8? В любом случае, я удалил строку, в которой говорилось о пакете, и все работало нормально.

person Graham Lea    schedule 07.06.2010

У меня была такая же проблема вчера, когда я пытался ее настроить. Решение довольно простое, вам просто нужно указать scala где-нибудь в настройках проекта.

person Theq    schedule 20.04.2010
comment
Я зашел в настройки, чтобы добавить подключаемый модуль Scala. Есть ли еще что-то, что мне нужно сделать? Спасибо - person Alex R; 20.04.2010
comment
Единственная неочевидная вещь, которой нет в основном руководстве, - это добавить библиотеку scala в зависимость вашего модуля. Это в настройках модуля - вкладка ›зависимостей AFAIR. Прекрасно работает даже с 2.8 RC. - person Theq; 22.04.2010

Вы смешиваете код, скомпилированный с двумя разными версиями Scala.

person Daniel C. Sobral    schedule 19.04.2010
comment
Это невозможно ... это всего лишь 3-строчная программа hello world! - person Alex R; 19.04.2010
comment
нет, правда ... 3 строки кода не могли быть скомпилированы с двумя разными версиями Scala. Есть вероятность, что IntelliJ находит файлы из предыдущих экспериментов; так что я собираюсь попробовать полностью удалить / переустановить сейчас. - person Alex R; 20.04.2010
comment
Кстати, какую IDE вы используете? Спасибо - person Alex R; 20.04.2010
comment
Мне? Использую IDEA. Я считаю, что он работает хорошо и работает уже довольно давно. Что касается гипотезы смешанной версии, она применяется ко всему коду, поэтому вы должны выполнять с библиотеками, скомпилированными той же версией компилятора Scala, что и та, с которой был скомпилирован ваш собственный код. - person Randall Schulz; 20.04.2010

Я использую Netbeans для написания программ Scala. Пока что он очень хорошо работает с моими кодами. Вы можете попробовать плагин здесь: http://wiki.netbeans.org/Scala68v1.

person Bruce Li    schedule 17.05.2010

Я получал эту ошибку, и мне также пришлось щелкнуть правой кнопкой мыши проект и «Открыть настройки модуля». Однако это было больше, чем просто применить. Я должен был убедиться, что мой Content Root подходит для каждого проекта. По какой-то причине были некорректные исходные и тестовые папки.

В моем проекте в качестве основного инструмента сборки используется maven, и, вероятно, эти неправильные настройки были вызваны импортом проекта в Intellij.

person Travis Stevens    schedule 26.01.2011
comment
Хм, на самом деле я хотел предложить создавать проекты IDEA из файлов сборки maven, поскольку именно так я успешно создал более 10 проектов за последние 12 месяцев. - person Stefan Endrullis; 24.08.2011

У меня была аналогичная проблема, следуя этим инструкциям в блоге. решил проблему для меня

person LiorH    schedule 26.08.2011