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) в #worksheet#.#worksheet#(lists.sc8362409100671270508.tmp:33)

Кроме того, когда я меняю последнюю строку на:

case x :: xs => 1 :: removeLast(xs)}

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

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


person Dawid Mazuruk    schedule 15.10.2014    source источник
comment
Вы можете изменить подпись на def removeLast[T](list:List[T]):List[T]   -  person Andrzej Jozwik    schedule 16.10.2014
comment
Спасибо за ответ, к сожалению я уже пробовал и результат как описано выше.   -  person Dawid Mazuruk    schedule 16.10.2014
comment
Идея использовать собственный компилятор scala. Поэтому вам следует создать тикет на youtrack.jetbrains.com/issues/SCL . Сначала проверьте, установлена ​​ли у вас последняя версия плагина 135.1228.   -  person Andrzej Jozwik    schedule 16.10.2014
comment
Спасибо за ссылку, оказалось уже сообщалось о проблеме (youtrack.jetbrains.com/issue /SCL-7691). Итак, я перешел на Intellij IDEA 13.0.4, и теперь все работает.   -  person Dawid Mazuruk    schedule 16.10.2014
comment
К вашему сведению, я использую IntelliJ 13.1.5 и столкнулся с той же проблемой. Исправлено благодаря ответу Томека.   -  person Matthieu Rouget    schedule 27.10.2014


Ответы (11)


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

person Tomek Kozlowski    schedule 16.10.2014
comment
Спасибо. Работал как шарм. Это Scala в настройках проекта. Это помогает снять флажок, как вы сказали, в разделе «Проект по умолчанию». - person Arjun Guha; 23.10.2014
comment
Снятие отметки с этой опции вызвало: 1) на листе строка (на вкладке результатов), в которой сообщалось о java.lang.NoSuchMethodError..., внезапно исчезла, но все еще не оценивалась 2) моя идея создать множество java.exe и conhost. exe, которые загружали процессор на 100% и делали Idea невероятно медленным и неотзывчивым. Есть ли другое решение? - person PaoloC; 30.10.2014
comment
Для Intelij 2017 я выполнил этот шаг File|Other Settings|Default Preferences|Languages & Frameworks| scala|Worksheet - person Miae Kim; 30.03.2018

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

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

помог

person viniolli    schedule 15.03.2015
comment
В общем, убедитесь, что вы используете одну и ту же версию scala для зависимых библиотек. Была такая же проблема со скалатестом. - person vks2106; 05.03.2020

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

По сути, он предпочитал, чтобы Scala SDK разрешал метод Class:: вместо загрузки из зависимостей.

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

-подробный: класс

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

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

Каждый раз, когда вы видите «NoSuchMethodError», это всегда означает наличие конфликта версий; это вопрос почему.

person Christian Bongiorno    schedule 23.03.2015
comment
В моем случае даже удаления из настроек проекта было недостаточно, мне пришлось перейти к файлу .iml проекта и вручную удалить неправильную версию scala. - person Arthur Kalimullin; 25.01.2019

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

To

<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>
person Franzi    schedule 02.10.2016

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

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

person Roberto    schedule 16.06.2015

Ошибка 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, но не работал.

Предложение Просьба установить следующие версии перед выполнением любого кода: spark - 2.2.0 scala - 2.11.6

Также я использовал ниже pom:

<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>
person Aakash Agrawal    schedule 26.08.2018

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

person Coo1 min    schedule 18.09.2019

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

person M.Rez    schedule 16.10.2014
comment
Решение с функцией карты это не то, что я искал, но все равно спасибо. - person Dawid Mazuruk; 16.10.2014

Я обнаружил, что это может быть вызвано наличием разных версий scalatest и scalamock. Следующий Знаток

<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>
person Andrew Long    schedule 02.01.2016

У меня было то же самое при добавлении json4. Я решил это, изменив идентификатор артефакта с json4s-native_2.12 на - json4s-native_2.11. Я предполагаю, что это связано с версией scala, которую вы используете, у меня была 2.11, а не 2.12 (вы можете увидеть свою в узле properties xml в файле pom.xml, моя: <scala.version>2.11</scala.version>.)

person Ohad Bitton    schedule 21.11.2018

это проблема версии, просто используйте версию scala sdk до 2.11.

person 刘孟德    schedule 06.12.2019