Closed panbingkun closed 1 month ago
cc @SethTisue @dongjoon-hyun @LuciferYang
The jline readme explains terminal support.
https://github.com/jline/jline3
The FFM provider is available since JLine 3.24 and when running on JDK >= 21.
Three cheers for dynamic linking and virtual dispatch.
The linked maven tooling issue is out of scope.
The jline readme explains terminal support.
https://github.com/jline/jline3
The FFM provider is available since JLine 3.24 and when running on JDK >= 21.
Three cheers for dynamic linking and virtual dispatch.
The linked maven tooling issue is out of scope.
So it means that scala 2.13.14
can only run in environments above JDK >= 21
, right?
I will refrain from speculation.
➜ ~ sdk use java 8.0.352-tem
Using java version 8.0.352-tem in this shell.
➜ ~ scala
Welcome to Scala 2.13.14 (OpenJDK 64-Bit Server VM, Java 1.8.0_352).
Type in expressions for evaluation. Or try :help.
scala> 42
val res0: Int = 42
scala>
it means that scala 2.13.14 can only run in environments above JDK >= 21, right?
Incorrect. The class in question is never loaded on older JDKs. Scala 2.13.14, including the REPL, works just fine on JDK 8.
It's only certain kinds of tooling that can become confused by the presence of the class in question.
See https://github.com/jline/jline3/issues/937 for full details on this.
Note that Scala 2.13.15 will use JLine 3.26.1 (or higher), which has some further changes in this area (https://github.com/jline/jline3/pull/949).
At the time we do the 3.26.1 upgrade, I'll look at whether it would work to use the new JAR with the jdk8 classifier. Regardless, I do not believe there is any actual issue here — at least, unless some further evidence is brought to light.
Incorrect. The class in question is never loaded on older JDKs. Scala 2.13.14, including the REPL, works just fine on JDK 8.
Thank you for your detailed explanation. I double check org.jline:jline:3.25.1
on local en . The process is as follows:
https://github.com/apache/spark/pull/46288#issuecomment-2095480361
When the jline
loads org.jline.terminal.impl.ffm.FfmTerminalProvider
, it skips automatically
because of the exception:
java.lang.UnsupportedClassVersionError: org/jline/terminal/impl/ffm/FfmTerminalProvider has been compiled by a more recent version of the Java Runtime (class file version 65.65535), this version of the Java Runtime only recognizes class file versions up to 61.0
which will not affect
us in the end
.
I'll look at whether it would work to use the new JAR with the jdk8 classifier
@sideeffffect beat me to it and we are going this route for 2.13.16: https://github.com/scala/scala/pull/10889
Reproduction steps
When we were preparing to upgrade the
scala version
from2.13.13
to2.13.14
in Spark, our maven pluginmaven-enforcer-plugin
found a problem, as follows:The root cause is that the class
org/jline/terminal/impl/ffm/CLibrary$termios.class
injline-3.25.1.jar
thatscala 2.13.14
depends on is compiled based on JDK21.Other classes in
jline-3.25.1.jar
seem normal, such as:Scala version: 2.13.14
Problem
Explain how the above behavior isn't what you expected. So our
scala 2.13.14
canonly
run onJDK21
? Or is that a issue/bug ?For details of problems encountered in upgrading, please refer to: https://github.com/apache/spark/pull/46288