Ответ 1
У меня была эта проблема. Согласитесь с Анджей, идея использует свой собственный компилятор, поэтому вам нужно как-то отключить его. Перейдите в Настройки → Scala → Рабочий лист и снимите флажок "Запустить лист в процессе компиляции" .
У меня есть следующая функция:
def removeLast(list: List[Int]): List[Int] = list match {
case List() => List()
case List(x) => List()
case x :: xs => x :: removeLast(xs)
}
Когда я определяю его и использую его с консоли sbt, все работает отлично. Но когда я создаю рабочий лист в Intellij IDEA и пытаюсь его запустить, появляется следующее исключение:
java.lang.NoSuchMethodError: scala.collection.immutable. $colon $colon.hd $1() Ljava/lang/Object; на неделе5.A $A26 $A $A26.removeLast(lists.sc8362409100671270508.tmp: 30) на #workheet #. # рабочий лист # (lists.sc8362409100671270508.tmp: 33)
Кроме того, когда я меняю последнюю строку на:
case x :: xs => 1 :: removeLast(xs)}
тогда он работает.
В чем может быть проблема?
У меня была эта проблема. Согласитесь с Анджей, идея использует свой собственный компилятор, поэтому вам нужно как-то отключить его. Перейдите в Настройки → Scala → Рабочий лист и снимите флажок "Запустить лист в процессе компиляции" .
В моем случае никакой ответ не был полезен. Тем не менее я нашел решение, которое сработало для меня.. Это была проблема с версией scalatest. В pom.xml uprade до
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.11</artifactId>
<version>2.2.4</version>
<scope>test</scope>
</dependency>
помог
Итак, хотя вышеупомянутое не решило мою проблему, оно связано с intellij.
В принципе, он предпочитает Scala SDK разрешать метод Class:: вместо загрузки из зависимостей.
Я использовал
-verbose: класс
в переключателе JVM, чтобы он показывал мне, где он выглядит; сразу же привлекая меня к этому, потому что он пытается загрузить класс из Scala SDK (он ожидал, что он вытащит libs из Maven).
Я буквально просто удалил Scala SDK из настроек моего проекта, и проблема исчезла. До сих пор мой опыт работы с Scala (и определенно в смешанной среде Java) заставлял меня думать, что у него есть способы перейти на зрелый. Это такой фундаментальный класс/метод, который я не могу поверить, что он исчез между версиями. Версия Scala, которую я установил, была 2.11. Видимо, что затягивается - 2.10.4 от maven.
В любое время, когда вы видите "NoSuchMethodError", он всегда означает, что существует конфликт версий; это вопрос о том, почему.
Как и другие, упомянутые здесь, у меня была одна и та же проблема, потому что у меня было несколько библиотек, использующих 2.10, несмотря на то, что у них было сканирование в 2.11.
<!-- http://www.scalactic.org/ -->
<dependency>
<groupId>org.scalactic</groupId>
<artifactId>scalactic_2.11</artifactId>
<version>${scalactic.version}</version>
<scope>test</scope>
</dependency>
<!-- http://www.scalatest.org/ -->
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.11</artifactId>
<version>${scalactic.version}</version>
<scope>test</scope>
</dependency>
Чеч, что все библиотеки, которые вы используете, находятся в одной версии Scala
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
Для
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
Наличие свойств
<properties>
<scala.tools.version>2.11.8</scala.tools.version>
<scala.version>2.11.8</scala.version>
<scalactic.version>3.0.0</scalactic.version>
<!-- Library Versions -->
<spark.version>2.0.0</spark.version>
....
</properties>
Я столкнулся с той же проблемой. Оказалось, что я загрузил неправильную версию Akka, которая включала scala -library-2.10.x, тогда как мой проект использует 2.11.6. Захват последней версии Akka, которая включает в себя 2.11.5, решила проблему.
Итак, похоже, это проблема совместимости, поэтому я буду проверять зависимости в будущем.
Error Ошибка java.lang.NoSuchMethodError: scala.collection.immutable. $ colon $ colon.hd $ 1() Ljava/lang/Object
Причина Эта ошибка связана с несовпадением версий между spark и scala. Я столкнулся с ошибкой, когда я использовал spark 2.2.0 и scala 2.10.6. Затем я перешел на другие версии Scala, но не добился успеха.
Разрешение Эта ошибка разрешается только тогда, когда я изменил версию Scala на 2.11.6. Эта версия идеально подходила для spark 2.2.0. Может быть, вы можете попробовать более высокие версии scala для той же проблемы, но я пробовал для 2.12.x, но не сработало.
Предложение Просим вас установить приведенные ниже версии перед выполнением любого кодирования: искра - 2.2.0 Scala - 2.11.6
Также я использовал следующий пом:
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>
У меня та же проблема. Когда вы меняете его на использование функции карты, он работает! Я не знаю, почему, но вот как это исправить.
Я обнаружил, что это может быть вызвано наличием разных версий scalatest и scalamock. Следующий Maven
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.11</artifactId><!-- this was previously 2.10 -->
<version>2.2.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.scalamock</groupId>
<artifactId>scalamock-scalatest-support_2.11</artifactId>
<version>3.2</version>
<scope>test</scope>
</dependency>
У меня было то же самое при добавлении json4
. Я решил это, изменив artifactId с json4s-native_2.12
на - json4s-native_2.11
.
Я предполагаю, что это связано с используемой вами версией scala - 2.11, а не 2.12 (вы можете увидеть свою версию в xml-узле properties
в файле pom.xml
, моя - <scala.version>2.11</scala.version>
.)
Я решил это, установив версию scala SDK в своем проекте с 2.12 по 2.11.