Как использовать Scala в IntelliJ IDEA (или: почему так сложно получить работающую IDE для Scala)?
Недавно я перестал пытаться использовать Scala в Eclipse (такие базовые вещи, как завершение, не работают). Так что теперь я пробую IntelliJ. Я не очень далеко.
Я был в состоянии редактировать программы (в рамках подсветки синтаксиса и завершения... ууу!). Но я не могу запустить даже самый простой "Hello World". Это была оригинальная ошибка:
Подпись Scala Predef имеет неверную версию Ожидаемый 5.0 найдено: 4.1 в.... scala-library.jar
Но это было вчера с IDEA 9.0.1. Увидеть ниже...
ОБНОВИТЬ
Сегодня я удалил IntelliJ 9.0.1 и установил 9.0.2 Early Availability с стабильной версией плагина Scala 4/14.
Затем я настраиваю проект с нуля через мастера:
- новый проект с нуля
- JDK составляет 1.6.u20
- принять по умолчанию (проект) вместо глобального / модуля
- принять загрузку Scala 2.8.0beta1 в папку lib проекта
Создан новый класс:
объект привет { def main(args: Array[String]) { println("привет: " + аргументы); } }
Из-за моих усилий у меня теперь совершенно новая ошибка:)
Вот:
Скалярная внутренняя ошибка: класс java.lang.ClassNotFoundException [java.net.URLClassLoader$1.run(URLClassLoader.java:202), java.security.AccessController.doPrivileged(собственный метод), java.net.URLClassLoader.findClasso (URLC):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 и переустановил 9.0.1, но на этот раз он шел с версией Scala 2.7.3, а не с версией 2.7.6 по умолчанию, потому что 2.7.3 - это та, что показана на скриншотах на сайте IntelliJ (Я думаю, что скриншоты доказывают, что они действительно тестировали эту версию!). Теперь все работает!!!
9 ответов
Я столкнулся с той же скалярной ошибкой при попытке запустить проект Scala в Intellij Idea 9.0.2, и мне удалось найти решение случайно:). Вот шаги, которые я предпринял при создании проекта и его запуске.
Я создал проект Scala в Intellij Idea 9.0.2 final (он был выпущен сегодня). Я установил плагин Scala, перезапустил IDE и создал новый проект Scala (с именем "TestScala") с scala-2.8.0.Beta1 в качестве библиотеки проекта. После создания проекта и загрузки библиотек scala я создал файл Test.scala со следующим содержимым:
object Test {
def main(args:Array[String]){
println("hello")
}
}
После этого я создал конфигурацию запуска ("Редактировать конфигурации"), выбрав шаблон "Приложение". Я установил в качестве основного класса Test и выбрал имя проекта ("TestScala") в поле со списком "Использовать classpath и JDK для модуля". Когда я запускаю конфигурацию, я получаю ту же ошибку, о которой вы сообщили ("Внутренняя ошибка Scalac: класс java.lang.ClassNotFoundException") .
Теперь прибывает причудливая часть:). Я щелкаю правой кнопкой мыши по проекту, выбираю "Настройки модуля", просматриваю все настройки, но ничего не меняю. Нажмите "Применить" и "ОК", попробуйте снова запустить конфигурацию, и она работает:).
Я использую Intellij Idea 9.0.2 финальную версию (сборка 95-66); Ubuntu 9.10 и JDK 1.6.0_18. Я также должен упомянуть, что в Intellij был настроен JDK, в противном случае есть дополнительный шаг для его настройки.
ОБНОВИТЬ:
При проверке настроек модуля нужно нажать на Module->Scala и Facets->Scala (разверните его и нажмите Scala (ProjectName)). Обе эти настройки относятся к компилятору scala и расположению библиотеки scala. Я предполагаю, что эти значения не установлены должным образом при создании проекта, но сохраняются, когда пользователь касается их и сохраняет настройки.
Чтобы ответить на ваш вопрос, трудно получить работающую 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, хотя у меня не было большого количества ответов на мои собственные сообщения там.
Установка плагина является обязательной.
Следующее, что вы должны сделать, это определить библиотеку (глобальную или специфичную для проекта; я использую глобальную), которая содержит библиотеку Scala и файлы JAR компилятора (как минимум, это scala-compiler.jar
а также scala-library.jar
). Добавление исходных файлов JAR и документации JAR или URL-адресов также является хорошей идеей. Затем сделайте эту библиотеку зависимой от любых модулей в вашем проекте, которые включают в себя код Scala.
Наконец, найдите фасеты Scala в этих модулях и снимите оба флажка там.
Я только что сделал новую установку, и у меня была точно такая же проблема. Оказалось, что, поскольку я создал файл в корневом пакете, IDEA добавила оператор пакета вверху, назвав его пакетом. Я предполагаю, что это затем было скомпилировано как "основной объект пакета" - допустимый синтаксис в 2.8? Во всяком случае, я удалил строку, которая сказала пакет, и все это работало нормально.
У меня вчера была та же проблема, когда я пытался ее настроить. Решение довольно простое, вам просто нужно установить scala где-нибудь в настройках проекта.
Вы смешиваете код, скомпилированный с двумя разными версиями Scala.
Я получал эту ошибку, а также должен был щелкнуть правой кнопкой мыши по проекту и "Открыть настройки модуля". Тем не менее, это было больше, чем просто применить. Я должен был убедиться, что мой Content Root был правильным для каждого проекта. По какой-то причине были неправильные исходные и тестовые папки.
Мой проект использует maven в качестве основного инструмента сборки, и, вероятно, импорт проекта в Intellij создал эти неверные настройки.
Я использую Netbeans для написания программ для Scala. Пока что это работает очень хорошо с моими кодами. Вы можете попробовать плагин здесь: http://wiki.netbeans.org/Scala68v1.
У меня была похожая проблема, следуя этой инструкции в блоге, я решил эту проблему для меня