Skip to content

Commit 4202c84

Browse files
Warn when running on JVM < 16 and some JVM 16 classes are missing
1 parent c4f448f commit 4202c84

File tree

1 file changed

+25
-4
lines changed

1 file changed

+25
-4
lines changed

modules/cli/src/main/scala/scala/cli/ScalaCli.scala

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,15 @@ object ScalaCli extends CommandsEntryPoint {
112112
private def ignoreSigpipe(): Unit =
113113
Signal.handle(new Signal("PIPE"), SignalHandler.SIG_IGN)
114114

115+
private def isJava17ClassName(name: String): Boolean =
116+
name == "java/net/UnixDomainSocketAddress"
117+
118+
private lazy val javaMajorVersion =
119+
sys.props.getOrElse("java.version", "0")
120+
.stripSuffix("1.")
121+
.takeWhile(_.isDigit)
122+
.toInt
123+
115124
override def main(args: Array[String]): Unit = {
116125
try main0(args)
117126
catch {
@@ -129,13 +138,25 @@ object ScalaCli extends CommandsEntryPoint {
129138
deleteOnExit = false
130139
)
131140

132-
if (CurrentParams.verbosity >= 2)
133-
throw e
134-
else {
141+
if (CurrentParams.verbosity <= 1) {
135142
System.err.println(s"Error: $e")
136143
System.err.println(s"For more details, please see '$tempFile'")
137-
sys.exit(1)
138144
}
145+
146+
e match {
147+
case _: NoClassDefFoundError
148+
if isJava17ClassName(
149+
e.getMessage
150+
) && CurrentParams.verbosity <= 1 && javaMajorVersion < 16 =>
151+
// Actually Java >= 16, but let's recommend a LTS version…
152+
System.err.println(
153+
s"Java >= 17 is required to run Scala CLI (found Java $javaMajorVersion)"
154+
)
155+
case _ =>
156+
}
157+
158+
if (CurrentParams.verbosity >= 2) throw e
159+
else sys.exit(1)
139160
}
140161
}
141162

0 commit comments

Comments
 (0)