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

Select sbt version 1.2.8 in the New Project dialog


Подробнее

В эти выходные я боролся с той же проблемой с новой версией 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