how - Intellij IDEA java.lang.NoSuchMethodError: scala.collection.immutable. $ Colon $ colon.hd $ 1() Ljava/lang/Object
scala cmd (9)
Acabo de encontrar el mismo problema. Resultó que había descargado la versión incorrecta de Akka que incluía scala-library-2.10.x, mientras que mi proyecto usa 2.11.6. La captura de la última versión de Akka, que incluye la versión 2.11.5, solucionó el problema.
Por lo tanto, parece que este es un problema de compatibilidad, así que verifico las dependencias en el futuro.
Tengo una función siguiente:
def removeLast(list: List[Int]): List[Int] = list match {
case List() => List()
case List(x) => List()
case x :: xs => x :: removeLast(xs)
}
Cuando lo defino y lo uso desde la consola sbt todo funciona bien. Pero cuando creo una hoja de trabajo en Intellij IDEA e intento ejecutarlo, aparece la siguiente excepción:
java.lang.NoSuchMethodError: scala.collection.immutable. $ colon $ colon.hd $ 1 () Ljava / lang / Object; en la semana5.A $ A26 $ A $ A26.removeLast (lists.sc8362409100671270508.tmp: 30) en # worksheet #. # worksheet # (lists.sc8362409100671270508.tmp: 33)
Además, cuando cambio la última línea a:
case x :: xs => 1 :: removeLast(xs)}
entonces funciona.
¿Cuál podría ser el problema?
Como han dicho otros aquí, tenía el mismo problema porque tenía algunas bibliotecas usando 2.10 a pesar de tener el scalatest en 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>
Chech que todas las bibliotecas que está utilizando están en la misma versión de Scala
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
A
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
Teniendo como propiedades
<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>
Cualquier respuesta no fue útil en mi caso. Todavía encontré una solución que funcionó para mí ... Fue un problema con la versión de scalatest. En pom.xml actualizado a
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.11</artifactId>
<version>2.2.4</version>
<scope>test</scope>
</dependency>
ayudado
Entonces, aunque lo anterior no resolvió mi problema, está relacionado con intellij.
Básicamente, prefería que el SDK de Scala resolviera el método Class :: en lugar de cargar desde las dependencias.
solía
-verbose: clase
en el conmutador JVM para que me muestre dónde estaba mirando; Inmediatamente me pido que sea porque está intentando cargar la clase desde el SDK de Scala (esperaría que obtuviera las libs de Maven).
Literalmente, simplemente eliminé el SDK de Scala de la configuración de mi proyecto y el problema desapareció. Hasta ahora, mi experiencia con Scala (y definitivamente en un entorno Java mixto) me lleva a creer que tiene una manera de madurar. Esta es una clase / método tan fundamental que no puedo creer que desaparezca entre versiones. La versión de scala que tenía instalada era 2.11. Al parecer, lo que se obtiene es 2.10.4 de maven.
Cada vez que vea "NoSuchMethodError" siempre significa que hay un conflicto de versión; Es una cuestión de por qué.
He encontrado que esto puede ser causado por tener diferentes versiones de scalatest y scalamock. El siguiente 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>
Tengo el mismo problema. ¡Cuando lo cambias para usar la función de mapa funciona! No sé por qué, pero eso es cómo solucionarlo.
Tuve este problema De acuerdo con Andrzej, la idea utiliza su propio compilador, por lo que debe desactivarlo de alguna manera. Vaya a Configuración-> Scala-> Hoja de trabajo y desmarque "Ejecutar hoja de trabajo en el proceso del compilador" .
Tuve lo mismo al agregar json4
. Lo resolví cambiando el artifactId de json4s-native_2.12
a - json4s-native_2.11
. Supongo que esto está relacionado con la versión de scala que estás usando: la mía era 2.11 y no la 2.12 (puedes ver la tuya en el nodo de properties
xml en el archivo pom.xml
, la mía es: <scala.version>2.11</scala.version>
.)
Error java.lang.NoSuchMethodError: scala.collection.immutable. $ Colon $ colon.hd $ 1 () Ljava / lang / Object
Motivo Este error se debe específicamente a la falta de coincidencia de versión entre spark y scala. Me enfrenté al error mientras estaba usando spark 2.2.0 y scala 2.10.6. Luego cambié a diferentes versiones de Scala pero no tuve éxito.
Resolución Este error se resuelve solo cuando cambié la versión de scala a 2.11.6. Esta versión fue una combinación perfecta para spark 2.2.0. Puede ser que puedas probar versiones más altas de scala por el mismo problema, pero lo intenté por 2.12.x pero no funcionó.
Sugerencia Solicite que configure las siguientes versiones antes de realizar cualquier codificación: spark - 2.2.0 scala - 2.11.6
También utilicé el siguiente 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>