3

When I try to compile a simple hello world program in Scala:

Hello.scala:

object Hello {
    def main(args: Array[String]): Unit = {
        println("hello world")
    }
}

with scalac Hello.scala. I get

error: java.lang.NoSuchMethodError: java.nio.ByteBuffer.clear()Ljava/nio/ByteBuffer;
        at scala.tools.nsc.io.SourceReader.read(SourceReader.scala:61)
        at scala.tools.nsc.io.SourceReader.read(SourceReader.scala:40)
        at scala.tools.nsc.io.SourceReader.read(SourceReader.scala:49)
        at scala.tools.nsc.Global.getSourceFile(Global.scala:395)
        at scala.tools.nsc.Global.getSourceFile(Global.scala:401)
        at scala.tools.nsc.Global$Run$$anonfun$30.apply(Global.scala:1607)
        at scala.tools.nsc.Global$Run$$anonfun$30.apply(Global.scala:1607)
        at scala.collection.immutable.List.map(List.scala:284)
        at scala.tools.nsc.Global$Run.compile(Global.scala:1607)
        at scala.tools.nsc.Driver.doCompile(Driver.scala:32)
        at scala.tools.nsc.MainClass.doCompile(Main.scala:23)
        at scala.tools.nsc.Driver.process(Driver.scala:51)
        at scala.tools.nsc.Driver.main(Driver.scala:64)
        at scala.tools.nsc.Main.main(Main.scala)
Exception in thread "main" java.lang.NoSuchMethodError: java.nio.ByteBuffer.clear()Ljava/nio/ByteBuffer;
        at scala.tools.nsc.io.SourceReader.read(SourceReader.scala:61)
        at scala.tools.nsc.io.SourceReader.read(SourceReader.scala:40)
        at scala.tools.nsc.io.SourceReader.read(SourceReader.scala:49)
        at scala.tools.nsc.Global.getSourceFile(Global.scala:395)
        at scala.tools.nsc.Global.getSourceFile(Global.scala:401)
        at scala.tools.nsc.Global$Run$$anonfun$30.apply(Global.scala:1607)
        at scala.tools.nsc.Global$Run$$anonfun$30.apply(Global.scala:1607)
        at scala.collection.immutable.List.map(List.scala:284)
        at scala.tools.nsc.Global$Run.compile(Global.scala:1607)
        at scala.tools.nsc.Driver.doCompile(Driver.scala:32)
        at scala.tools.nsc.MainClass.doCompile(Main.scala:23)
        at scala.tools.nsc.Driver.process(Driver.scala:51)
        at scala.tools.nsc.Driver.main(Driver.scala:64)
        at scala.tools.nsc.Main.main(Main.scala)

on Ubuntu 18 with scalac version 2.11.12 and java version 1.8.0_181. Strangely, this same program will compile and run on macOS with scalac version 2.12.6 and java 1.8.0_111.

My two questions are: why does this happen? How can I fix this?

Thank you.

Jon Deaton
  • 3,943
  • 6
  • 28
  • 41

1 Answers1

2

With scala 2.11.12, I had to install openjdk version "10.0.2". This was done with the command openjdk-11-jdk-headless weirdly enough.

https://docs.scala-lang.org/overviews/jdk-compatibility/overview.html

I was getting the same error when running openjdk version 8.

Giannis
  • 5,286
  • 15
  • 58
  • 113
  • I don't think the compatibility matrix alone explains it. I've expanded my answer in another similar question to explain the reason for the error: https://stackoverflow.com/a/51223234/5180989 – Helder Pereira Dec 06 '20 at 20:52