Under Scala 2.13.3, get java.lang.NoClassDefFoundError: scala/Serializable
plaurent opened this issue · 2 comments
Hi,
When building from the latest release (scala-parser-combinators_2.12-1.1.2-SNAPSHOT.jar) and running under Scala 2.13.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_251), the simple test example compiles fine but I get java.lang.NoClassDefFoundError: scala/Serializable while running it:
import scala.util.parsing.combinator._
class SimpleParser extends RegexParsers {
def word: Parser[String] = """[a-z]+""".r ^^ { _.toString }
}
object TestSimpleParser extends SimpleParser {
def main(args: Array[String]) = println(parse(word, "johnny come lately"))
}
Here's the output
$ scala TestSimpleParser
Exception in thread "main" java.lang.NoClassDefFoundError: scala/Serializable
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at scala.reflect.internal.util.ScalaClassLoader.run(ScalaClassLoader.scala:101)
at scala.reflect.internal.util.ScalaClassLoader.run$(ScalaClassLoader.scala:97)
at scala.reflect.internal.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:130)
at scala.tools.nsc.CommonRunner.run(ObjectRunner.scala:29)
at scala.tools.nsc.CommonRunner.run$(ObjectRunner.scala:28)
at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:43)
at scala.tools.nsc.CommonRunner.runAndCatch(ObjectRunner.scala:35)
at scala.tools.nsc.CommonRunner.runAndCatch$(ObjectRunner.scala:34)
at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:70)
at scala.tools.nsc.MainGenericRunner.run$1(MainGenericRunner.scala:91)
at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:103)
at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:108)
at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
Caused by: java.lang.ClassNotFoundException: scala.Serializable
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 29 more
Any suggestions on how to use this library with the latest version of Scala?
Scala versions are epoch.major.minor, and major versions aren't binary compatible with each other in either direction, as per https://docs.scala-lang.org/overviews/core/binary-compatibility-of-scala-releases.html . You cannot use a library built for 2.12 on 2.13, or vice versa. Thus, on 2.13, you need scala-parser-combinators_2.13
(not scala-parser-combinators_2.12
).
If you are building the library yourself, do ++2.13.3
first, followed by publishLocal
.
Thanks!