Intellij IDEA java.lang.NoSuchMethodError: scala.collection.immutable. $Colon $colon.hd $1() Ljava/lang/Object

У меня есть следующая функция:

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)}

тогда он работает.

В чем может быть проблема?

Ответы

Ответ 1

У меня была эта проблема. Согласитесь с Анджей, идея использует свой собственный компилятор, поэтому вам нужно как-то отключить его. Перейдите в Настройки → Scala → Рабочий лист и снимите флажок "Запустить лист в процессе компиляции" .

Ответ 2

В моем случае никакой ответ не был полезен. Тем не менее я нашел решение, которое сработало для меня.. Это была проблема с версией scalatest. В pom.xml uprade до

  <dependency>
        <groupId>org.scalatest</groupId>
        <artifactId>scalatest_2.11</artifactId>
         <version>2.2.4</version>
         <scope>test</scope>
  </dependency>

помог

Ответ 3

Итак, хотя вышеупомянутое не решило мою проблему, оно связано с intellij.

В принципе, он предпочитает Scala SDK разрешать метод Class:: вместо загрузки из зависимостей.

Я использовал

-verbose: класс

в переключателе JVM, чтобы он показывал мне, где он выглядит; сразу же привлекая меня к этому, потому что он пытается загрузить класс из Scala SDK (он ожидал, что он вытащит libs из Maven).

Я буквально просто удалил Scala SDK из настроек моего проекта, и проблема исчезла. До сих пор мой опыт работы с Scala (и определенно в смешанной среде Java) заставлял меня думать, что у него есть способы перейти на зрелый. Это такой фундаментальный класс/метод, который я не могу поверить, что он исчез между версиями. Версия Scala, которую я установил, была 2.11. Видимо, что затягивается - 2.10.4 от maven.

В любое время, когда вы видите "NoSuchMethodError", он всегда означает, что существует конфликт версий; это вопрос о том, почему.

Ответ 4

Как и другие, упомянутые здесь, у меня была одна и та же проблема, потому что у меня было несколько библиотек, использующих 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>

Ответ 5

Я столкнулся с той же проблемой. Оказалось, что я загрузил неправильную версию Akka, которая включала scala -library-2.10.x, тогда как мой проект использует 2.11.6. Захват последней версии Akka, которая включает в себя 2.11.5, решила проблему.

Итак, похоже, это проблема совместимости, поэтому я буду проверять зависимости в будущем.

Ответ 6

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>

Ответ 7

У меня та же проблема. Когда вы меняете его на использование функции карты, он работает! Я не знаю, почему, но вот как это исправить.

Ответ 8

Я обнаружил, что это может быть вызвано наличием разных версий 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>

Ответ 9

У меня было то же самое при добавлении 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>.)

Ответ 10

Я решил это, установив версию scala SDK в своем проекте с 2.12 по 2.11.