Skip to content

Commit 915e7cb

Browse files
authored
Extract used Java versions to constants (#3087)
1 parent 42c8427 commit 915e7cb

File tree

14 files changed

+54
-41
lines changed

14 files changed

+54
-41
lines changed

build.sc

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import $ivy.`com.lihaoyi::mill-contrib-bloop:$MILL_VERSION`
22
import $ivy.`io.get-coursier::coursier-launcher:2.1.10`
33
import $ivy.`io.github.alexarchambault.mill::mill-native-image-upload:0.1.25`
4-
import $file.project.deps, deps.{Deps, Docker, InternalDeps, Scala, TestDeps}
4+
import $file.project.deps, deps.{Deps, Docker, InternalDeps, Java, Scala, TestDeps}
55
import $file.project.publish, publish.{ghOrg, ghName, ScalaCliPublishModule, organization}
66
import $file.project.settings, settings.{
77
CliLaunchers,
@@ -459,6 +459,10 @@ trait Core extends ScalaCliCrossSbtModule
459459
| def typelevelToolkitDefaultVersion = "${Deps.typelevelToolkitVersion}"
460460
| def typelevelToolkitMaxScalaNative = "${Deps.Versions.maxScalaNativeForTypelevelToolkit}"
461461
|
462+
| def minimumBloopJavaVersion = ${Java.minimumBloopJava}
463+
| def minimumInternalJavaVersion = ${Java.minimumInternalJava}
464+
| def defaultJavaVersion = ${Java.defaultJava}
465+
|
462466
| def defaultScalaVersion = "${Scala.defaultUser}"
463467
| def defaultScala212Version = "${Scala.scala212}"
464468
| def defaultScala213Version = "${Scala.scala213}"
@@ -809,6 +813,8 @@ trait Cli extends CrossSbtModule with ProtoBuildModule with CliLaunchers
809813
|/** Build-time constants. Generated by mill. */
810814
|object Constants {
811815
| def defaultScalaVersion = "${Scala.defaultUser}"
816+
| def defaultJavaVersion = ${Java.defaultJava}
817+
| def minimumBloopJavaVersion = ${Java.minimumBloopJava}
812818
| def scalaJsVersion = "${Scala.scalaJs}"
813819
| def scalaJsCliVersion = "${Scala.scalaJsCli}"
814820
| def scalaNativeVersion = "${Deps.nativeTools.dep.version}"

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

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -138,14 +138,15 @@ object ScalaCli {
138138
}
139139

140140
e match {
141-
case _: UnsupportedClassVersionError if javaMajorVersion < 17 =>
142-
warnRequiresJava17()
141+
case _: UnsupportedClassVersionError
142+
if javaMajorVersion < Constants.minimumBloopJavaVersion =>
143+
warnRequiresMinimumBloopJava()
143144
case _: NoClassDefFoundError
144145
if isJava17ClassName(e.getMessage) &&
145146
CurrentParams.verbosity <= 1 &&
146-
javaMajorVersion < 16 =>
147+
javaMajorVersion < Constants.minimumInternalJavaVersion =>
147148
// Actually Java >= 16 here, but let's recommend a LTS version…
148-
warnRequiresJava17()
149+
warnRequiresMinimumBloopJava()
149150
case _: FailedToStartServerException =>
150151
System.err.println(
151152
s"""Running
@@ -169,9 +170,9 @@ object ScalaCli {
169170
else sys.exit(1)
170171
}
171172

172-
private def warnRequiresJava17(): Unit =
173+
private def warnRequiresMinimumBloopJava(): Unit =
173174
System.err.println(
174-
s"Java >= 17 is required to run $fullRunnerName (found Java $javaMajorVersion)"
175+
s"Java >= ${Constants.minimumBloopJavaVersion} is required to run $fullRunnerName (found Java $javaMajorVersion)"
175176
)
176177

177178
def loadJavaProperties(cwd: os.Path) = {
@@ -250,7 +251,7 @@ object ScalaCli {
250251
val newArgs = powerArgs ++ finalScalaRunnerArgs ++ args0
251252
LauncherCli.runAndExit(ver, launcherOpts, newArgs)
252253
case _ if
253-
javaMajorVersion < 17
254+
javaMajorVersion < Constants.minimumBloopJavaVersion
254255
&& sys.props.get("scala-cli.kind").exists(_.startsWith("jvm")) =>
255256
JavaLauncherCli.runAndExit(args)
256257
case None =>

modules/cli/src/main/scala/scala/cli/commands/bloop/Bloop.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import bloop.rifle.internal.Operations
44
import bloop.rifle.{BloopRifle, BloopRifleConfig, BloopThreads}
55
import caseapp.core.RemainingArgs
66

7-
import scala.build.internal.OsLibc
7+
import scala.build.internal.{Constants, OsLibc}
88
import scala.build.{Directories, Logger}
99
import scala.cli.CurrentParams
1010
import scala.cli.commands.ScalaCommand
@@ -38,7 +38,7 @@ object Bloop extends ScalaCommand[BloopOptions] {
3838
val javaHomeInfo = opts.compilationServer.bloopJvm
3939
.map(JvmUtils.downloadJvm(_, options))
4040
.getOrElse {
41-
JvmUtils.getJavaCmdVersionOrHigher(17, options)
41+
JvmUtils.getJavaCmdVersionOrHigher(Constants.minimumBloopJavaVersion, options)
4242
}.orExit(logger)
4343

4444
opts.compilationServer.bloopRifleConfig(

modules/cli/src/main/scala/scala/cli/commands/new/New.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ object New extends ScalaCommand[NewOptions] {
3939

4040
val buildOptions = BuildOptions(
4141
javaOptions = JavaOptions(
42-
jvmIdOpt = Some(OsLibc.baseDefaultJvm(OsLibc.jvmIndexOs, "17")).map(Positioned.none)
42+
jvmIdOpt = Some(OsLibc.defaultJvm(OsLibc.jvmIndexOs)).map(Positioned.none)
4343
)
4444
)
4545

modules/cli/src/main/scala/scala/cli/commands/shared/SharedCompilationServerOptions.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import caseapp.*
66
import com.github.plokhotnyuk.jsoniter_scala.core.*
77
import com.github.plokhotnyuk.jsoniter_scala.macros.*
88
import coursier.cache.FileCache
9-
import coursier.core.{Version => Ver}
9+
import coursier.core.Version as Ver
1010
import coursier.util.Task
1111

1212
import java.io.File
@@ -15,6 +15,7 @@ import java.util.Random
1515

1616
import scala.build.internal.Util
1717
import scala.build.{Bloop, Logger, Os}
18+
import scala.cli.commands.Constants
1819
import scala.cli.commands.bloop.BloopJson
1920
import scala.cli.commands.shared.*
2021
import scala.cli.internal.Pid
@@ -86,7 +87,7 @@ final case class SharedCompilationServerOptions(
8687
bloopGlobalOptionsFile: Option[String] = None,
8788

8889
@Group(HelpGroup.CompilationServer.toString)
89-
@HelpMessage("JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …)")
90+
@HelpMessage(s"JVM to use to start Bloop (e.g. 'system|${Constants.minimumBloopJavaVersion}', 'temurin:21', …)")
9091
@Hidden
9192
bloopJvm: Option[String] = None,
9293

@@ -276,7 +277,7 @@ final case class SharedCompilationServerOptions(
276277
javaOpts =
277278
(if (bloopDefaultJavaOpts) baseConfig.javaOpts
278279
else Nil) ++ bloopJavaOpt ++ bloopDefaultJvmOptions(logger).getOrElse(Nil),
279-
minimumBloopJvm = javaV.getOrElse(17),
280+
minimumBloopJvm = javaV.getOrElse(Constants.minimumBloopJavaVersion),
280281
retainedBloopVersion = retainedBloopVersion
281282
)
282283
}

modules/cli/src/main/scala/scala/cli/commands/shared/SharedOptions.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -568,7 +568,7 @@ final case class SharedOptions(
568568
.orElse {
569569
for (javaHome <- options.javaHomeLocationOpt()) yield {
570570
val (javaHomeVersion, javaHomeCmd) = OsLibc.javaHomeVersion(javaHome.value)
571-
if (javaHomeVersion >= 17)
571+
if (javaHomeVersion >= Constants.minimumBloopJavaVersion)
572572
BuildOptions.JavaHomeInfo(javaHome.value, javaHomeCmd, javaHomeVersion)
573573
else defaultJvmHome
574574
}

modules/cli/src/main/scala/scala/cli/exportCmd/MavenProjectDescriptor.scala

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -295,9 +295,8 @@ final case class MavenProjectDescriptor(
295295
sourcesTest: Sources
296296
): Either[BuildException, MavenProject] = {
297297
val jdk =
298-
optionsMain.javaOptions.jvmIdOpt.map(_.value).getOrElse(
299-
"17"
300-
) // todo: get from constants for default jdk
298+
optionsMain.javaOptions.jvmIdOpt.map(_.value)
299+
.getOrElse(Constants.defaultJavaVersion.toString)
301300
val projectChunks = Seq(
302301
sources(sourcesMain, sourcesTest),
303302
javaOptionsSettings(optionsMain),

modules/cli/src/main/scala/scala/cli/javaLauncher/JavaLauncherCli.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ object JavaLauncherCli {
1919

2020
val buildOptions = BuildOptions(
2121
javaOptions = JavaOptions(
22-
jvmIdOpt = Some(OsLibc.baseDefaultJvm(OsLibc.jvmIndexOs, "17")).map(Positioned.none)
22+
jvmIdOpt = Some(OsLibc.defaultJvm(OsLibc.jvmIndexOs)).map(Positioned.none)
2323
)
2424
)
2525
val launcherKind = sys.props.get("scala-cli.kind") match {

modules/cli/src/main/scala/scala/cli/launcher/LauncherCli.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ object LauncherCli {
5252

5353
val buildOptions = BuildOptions(
5454
javaOptions = JavaOptions(
55-
jvmIdOpt = Some(OsLibc.baseDefaultJvm(OsLibc.jvmIndexOs, "17")).map(Positioned.none)
55+
jvmIdOpt = Some(OsLibc.defaultJvm(OsLibc.jvmIndexOs)).map(Positioned.none)
5656
)
5757
)
5858

modules/core/src/main/scala/scala/build/internals/OsLibc.scala

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,20 +61,18 @@ object OsLibc {
6161
else default
6262
}
6363

64-
private def defaultJvmVersion = "17"
65-
6664
def baseDefaultJvm(os: String, jvmVersion: String): String = {
67-
def java17OrHigher = Try(jvmVersion.takeWhile(_.isDigit).toInt)
65+
def bloomMinimumJavaOrHigher = Try(jvmVersion.takeWhile(_.isDigit).toInt)
6866
.toOption
69-
.forall(_ >= 17)
67+
.forall(_ >= Constants.minimumBloopJavaVersion)
7068
if (os == "linux-musl") s"liberica:$jvmVersion" // zulu could work too
71-
else if (java17OrHigher) s"temurin:$jvmVersion"
69+
else if (bloomMinimumJavaOrHigher) s"temurin:$jvmVersion"
7270
else if (Os.isArmArchitecture) s"zulu:$jvmVersion" // adopt doesn't support Java 8 on macOS arm
7371
else s"temurin:$jvmVersion"
7472
}
7573

7674
def defaultJvm(os: String): String =
77-
baseDefaultJvm(os, defaultJvmVersion)
75+
baseDefaultJvm(os, Constants.defaultJavaVersion.toString)
7876

7977
def javaVersion(javaCmd: String): Int = {
8078
val javaVersionOutput = os.proc(javaCmd, "-version").call(

0 commit comments

Comments
 (0)