Scala-библиотека импортирована дважды?
Я просто пытаюсь выполнить простое приложение Hello World в Scala на Intellij с SBT, но даже это... это кажется слишком сложным.
Я следовал инструкциям здесь: https://www.cloudera.com/tutorials/setting-up-a-spark-development-environment-with-scala/.html
Я использую для работы с Eclipse и Maven... Здесь я на Intellij и SBT, поэтому я стараюсь изо всех сил, но я немного потерян. Вот что я сделал:
- Я установил Intellij, SBT.
- Я настроил модуль запуска SBT в Intellij, выбрав "Файл"> "Настройки"> "Сборка, выполнение, развертывание"> "Инструменты сборки"> "sbt"> "Модуль запуска"
- .Создать новый проект с Java 1.8, SBT 1.3, Scala 2.13
- На этом шаге я не смог создать класс Scala, но я заметил, что если я "Reimport sbt project", то класс scala появится в списке нового элемента для создания.
- Создайте объект основным методом:
object HelloScala {
def main(args: Array[String]): Unit = {
println("Hello world!")
}
}
Когда я пытаюсь выполнить это основное, это приводит к следующей ошибке:
Error:scalac: Multiple 'scala-library*.jar' files (scala-library-2.13.0.jar, scala-library-2.13.0.jar) in Scala compiler classpath in Scala SDK sbt: org.scala-lang:scala-library:2.13.0:jar
Мой build.sbt:
name := "HelloScala"
version := "0.1"
scalaVersion := "2.13.0"
Я проверил путь к классам компилятора в "Файл"> "Структура проекта"> "Библиотеки"> "Путь к классам компилятора":
file:///AppData/Local/Coursier/cache/v1/https/repo1.maven.org/maven2/jline/jline/2.14.6/jline-2.14.6.jar
file:///AppData/Local/Coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.13.0/scala-compiler-2.13.0.jar
file:///AppData/Local/Coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.0/scala-library-2.13.0.jar
file:///AppData/Local/Coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.13.0/scala-reflect-2.13.0.jar
Я попытался удалить целевой каталог, сделать недействительным кеш, восстановить папку .idea, удалив ее и разрешив intellij воссоздать ее, я искал в другом scala-library.jar в структуре проекта. Я ничего не нашел...
Действительно... Я не понимаю, почему на библиотеку scala ссылаются дважды.
Если я изменю версию scala с 2.13.0 на 2.11.0, та же проблема:
Error:scalac: Multiple 'scala-library*.jar' files (scala-library-2.11.0.jar, scala-library-2.11.0.jar) in Scala compiler classpath in Scala SDK sbt: org.scala-lang:scala-library:2.11.0:jar
НО ! Если я прокомментирую версию scala в build.sbt:
name := "HelloScala"
version := "0.1"
//scalaVersion := "2.11.0"
Затем, если я очищаю целевой каталог, повторно импортирую проект sbt и пытаюсь выполнить, он работает! И в целевом каталоге у меня есть новая папка scala-2.12... Откуда, черт возьми, она взялась?!
Для информации, я на Windows 10, Intellij 2019.2, JDK 1.8, SBT 13
Любая помощь очень ценится!
Ответы
Ответ 1
Попробуйте это:
Внешние библиотеки> [Щелкните правой кнопкой мыши] sbt: org.scala-lang: scala-library: x.x.x: jar> Открыть настройки библиотеки> Настройки проекта> Библиотеки
Там есть раздел с классами, источниками и & JavaDocs. Нажмите JavaDocs & удалите его со знаком минус выше. Нажмите ОК.
Повторно импортируйте ваш проект sbt (на панели инструментов sbt справа).
Все еще не уверен, почему ошибка происходит или почему это исправляет.
Ответ 2
TL; DR
Верните свои проекты IDEA в версии 1.2.8
Подробнее
В эти выходные я боролся с той же проблемой с новой версией IntelliJ IDEA. Я пробовал разные версии IDE и некоторые другие исправления, предложенные выше, но единственное решение, которое действительно, похоже, работало, - это ручное редактирование автоматически сгенерированного файла .idea/libraries/sbt__org_scala_lang_scala_library_2_13_0_jar.xml
, чтобы удалить дублирующиеся записи JAR.
Я наконец установил связь между ошибкой и новой версией sbt
, когда заметил этот диалог в своей оболочке:
[info] Welcome to sbt 1.3.0.
[info] Here are some highlights of this release:
[info] - Coursier: new default library management using https://get-coursier.io
[info] - Super shell: displays actively running tasks
[info] - Turbo mode: makes 'test' and 'run' faster in interactive sessions. Try it by running 'set ThisBuild / turbo := true'.
[info] See https://www.lightbend.com/blog/sbt-1.3.0-release for full release notes.
Поскольку в sbt 1.3.0 появился Coursier, а дубликаты JAR-записей в сгенерированных IDEA XML файлах были сохранены в каталоге кэша Coursier, я подумал, что возврат к sbt 1.2.8 может решить эту проблему.
Конечно же, я получаю только ошибку "Несколько файлов scala-library *.jar" при использовании sbt 1.3.0. Я пересоздал свой проект несколько раз и не видел ошибки при использовании sbt 1.2.8.
Ответ 3
Если у вас нет свойства scalaVersion в вашем build.sbt
, sbt
будет использовать версию, указанную в project/build.sbt