Closed
Description
When using vavr 0.9.3 with Scala 2.12.7 I am getting the following exception:
java.lang.BootstrapMethodError: java.lang.IllegalAccessError: tried to access class io.vavr.Lambda from class Main$
at Main$.main(Main.scala:3)
at Main.main(Main.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at scala.reflect.internal.util.ScalaClassLoader.$anonfun$run$2(ScalaClassLoader.scala:99)
at scala.reflect.internal.util.ScalaClassLoader.asContext(ScalaClassLoader.scala:34)
at scala.reflect.internal.util.ScalaClassLoader.asContext$(ScalaClassLoader.scala:30)
at scala.reflect.internal.util.ScalaClassLoader$URLClassLoader.asContext(ScalaClassLoader.scala:125)
at scala.reflect.internal.util.ScalaClassLoader.run(ScalaClassLoader.scala:99)
at scala.reflect.internal.util.ScalaClassLoader.run$(ScalaClassLoader.scala:91)
at scala.reflect.internal.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:125)
at scala.tools.nsc.CommonRunner.run(ObjectRunner.scala:22)
at scala.tools.nsc.CommonRunner.run$(ObjectRunner.scala:21)
at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:39)
at scala.tools.nsc.CommonRunner.runAndCatch(ObjectRunner.scala:29)
at scala.tools.nsc.CommonRunner.runAndCatch$(ObjectRunner.scala:28)
at scala.tools.nsc.ObjectRunner$.runAndCatch(ObjectRunner.scala:39)
at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:66)
at scala.tools.nsc.MainGenericRunner.run$1(MainGenericRunner.scala:85)
at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:96)
at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:101)
at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
When trying to run the following code:
object Main {
def main(args: Array[String]): Unit = {
println(io.vavr.Function1.of(math.abs))
}
}
I compile and run the code with the following commands:
scalac -d out -classpath (coursier fetch io.vavr:vavr:0.9.3 | paste -s -d:) Main.scala
scala -d out -classpath out:(coursier fetch io.vavr:vavr:0.9.3 | paste -s -d:) Main
The compiled class according to javap looks like:
vavr-interop ─╼ javap -c out/Main\$.class 0
Compiled from "Main.scala"
public final class Main$ {
public static Main$ MODULE$;
public static {};
Code:
0: new #2 // class Main$
3: invokespecial #17 // Method "<init>":()V
6: return
public void main(java.lang.String[]);
Code:
0: getstatic #25 // Field scala/Predef$.MODULE$:Lscala/Predef$;
3: invokedynamic #49, 0 // InvokeDynamic #0:apply:()Lio/vavr/Function1;
8: invokestatic #55 // InterfaceMethod io/vavr/Function1.of:(Lio/vavr/Function1;)Lio/vavr/Function1;
11: invokevirtual #59 // Method scala/Predef$.println:(Ljava/lang/Object;)V
14: return
public static final int $anonfun$main$1(int);
Code:
0: getstatic #69 // Field scala/math/package$.MODULE$:Lscala/math/package$;
3: iload_0
4: invokevirtual #72 // Method scala/math/package$.abs:(I)I
7: ireturn
public static final java.lang.Object $anonfun$main$1$adapted(java.lang.Object);
Code:
0: aload_0
1: invokestatic #82 // Method scala/runtime/BoxesRunTime.unboxToInt:(Ljava/lang/Object;)I
4: invokestatic #84 // Method $anonfun$main$1:(I)I
7: invokestatic #88 // Method scala/runtime/BoxesRunTime.boxToInteger:(I)Ljava/lang/Integer;
10: areturn
}