From 11fbf86ebf970de6e077bb2bb950019c79b8e50f Mon Sep 17 00:00:00 2001 From: Piotr Chabelski Date: Fri, 9 Aug 2024 15:39:25 +0200 Subject: [PATCH] Extract used Java versions to constants --- build.sc | 8 +++++++- .../src/main/scala/scala/cli/ScalaCli.scala | 15 +++++++------- .../scala/cli/commands/bloop/Bloop.scala | 4 ++-- .../scala/scala/cli/commands/new/New.scala | 2 +- .../SharedCompilationServerOptions.scala | 7 ++++--- .../cli/commands/shared/SharedOptions.scala | 2 +- .../exportCmd/MavenProjectDescriptor.scala | 5 ++--- .../cli/javaLauncher/JavaLauncherCli.scala | 2 +- .../scala/cli/launcher/LauncherCli.scala | 2 +- .../scala/scala/build/internals/OsLibc.scala | 10 ++++------ project/deps.sc | 14 ++++++++++--- website/docs/reference/cli-options.md | 2 +- .../reference/scala-command/cli-options.md | 2 +- .../scala-command/runner-specification.md | 20 +++++++++---------- 14 files changed, 54 insertions(+), 41 deletions(-) diff --git a/build.sc b/build.sc index 528ebf9788..f12e6e989f 100644 --- a/build.sc +++ b/build.sc @@ -1,7 +1,7 @@ import $ivy.`com.lihaoyi::mill-contrib-bloop:$MILL_VERSION` import $ivy.`io.get-coursier::coursier-launcher:2.1.10` import $ivy.`io.github.alexarchambault.mill::mill-native-image-upload:0.1.25` -import $file.project.deps, deps.{Deps, Docker, InternalDeps, Scala, TestDeps} +import $file.project.deps, deps.{Deps, Docker, InternalDeps, Java, Scala, TestDeps} import $file.project.publish, publish.{ghOrg, ghName, ScalaCliPublishModule, organization} import $file.project.settings, settings.{ CliLaunchers, @@ -459,6 +459,10 @@ trait Core extends ScalaCliCrossSbtModule | def typelevelToolkitDefaultVersion = "${Deps.typelevelToolkitVersion}" | def typelevelToolkitMaxScalaNative = "${Deps.Versions.maxScalaNativeForTypelevelToolkit}" | + | def minimumBloopJavaVersion = ${Java.minimumBloopJava} + | def minimumInternalJavaVersion = ${Java.minimumInternalJava} + | def defaultJavaVersion = ${Java.defaultJava} + | | def defaultScalaVersion = "${Scala.defaultUser}" | def defaultScala212Version = "${Scala.scala212}" | def defaultScala213Version = "${Scala.scala213}" @@ -809,6 +813,8 @@ trait Cli extends CrossSbtModule with ProtoBuildModule with CliLaunchers |/** Build-time constants. Generated by mill. */ |object Constants { | def defaultScalaVersion = "${Scala.defaultUser}" + | def defaultJavaVersion = ${Java.defaultJava} + | def minimumBloopJavaVersion = ${Java.minimumBloopJava} | def scalaJsVersion = "${Scala.scalaJs}" | def scalaJsCliVersion = "${Scala.scalaJsCli}" | def scalaNativeVersion = "${Deps.nativeTools.dep.version}" diff --git a/modules/cli/src/main/scala/scala/cli/ScalaCli.scala b/modules/cli/src/main/scala/scala/cli/ScalaCli.scala index 0695a38459..8047549c04 100644 --- a/modules/cli/src/main/scala/scala/cli/ScalaCli.scala +++ b/modules/cli/src/main/scala/scala/cli/ScalaCli.scala @@ -138,14 +138,15 @@ object ScalaCli { } e match { - case _: UnsupportedClassVersionError if javaMajorVersion < 17 => - warnRequiresJava17() + case _: UnsupportedClassVersionError + if javaMajorVersion < Constants.minimumBloopJavaVersion => + warnRequiresMinimumBloopJava() case _: NoClassDefFoundError if isJava17ClassName(e.getMessage) && CurrentParams.verbosity <= 1 && - javaMajorVersion < 16 => + javaMajorVersion < Constants.minimumInternalJavaVersion => // Actually Java >= 16 here, but let's recommend a LTS version… - warnRequiresJava17() + warnRequiresMinimumBloopJava() case _: FailedToStartServerException => System.err.println( s"""Running @@ -169,9 +170,9 @@ object ScalaCli { else sys.exit(1) } - private def warnRequiresJava17(): Unit = + private def warnRequiresMinimumBloopJava(): Unit = System.err.println( - s"Java >= 17 is required to run $fullRunnerName (found Java $javaMajorVersion)" + s"Java >= ${Constants.minimumBloopJavaVersion} is required to run $fullRunnerName (found Java $javaMajorVersion)" ) def loadJavaProperties(cwd: os.Path) = { @@ -250,7 +251,7 @@ object ScalaCli { val newArgs = powerArgs ++ finalScalaRunnerArgs ++ args0 LauncherCli.runAndExit(ver, launcherOpts, newArgs) case _ if - javaMajorVersion < 17 + javaMajorVersion < Constants.minimumBloopJavaVersion && sys.props.get("scala-cli.kind").exists(_.startsWith("jvm")) => JavaLauncherCli.runAndExit(args) case None => diff --git a/modules/cli/src/main/scala/scala/cli/commands/bloop/Bloop.scala b/modules/cli/src/main/scala/scala/cli/commands/bloop/Bloop.scala index b558586f2e..f139163132 100644 --- a/modules/cli/src/main/scala/scala/cli/commands/bloop/Bloop.scala +++ b/modules/cli/src/main/scala/scala/cli/commands/bloop/Bloop.scala @@ -4,7 +4,7 @@ import bloop.rifle.internal.Operations import bloop.rifle.{BloopRifle, BloopRifleConfig, BloopThreads} import caseapp.core.RemainingArgs -import scala.build.internal.OsLibc +import scala.build.internal.{Constants, OsLibc} import scala.build.{Directories, Logger} import scala.cli.CurrentParams import scala.cli.commands.ScalaCommand @@ -38,7 +38,7 @@ object Bloop extends ScalaCommand[BloopOptions] { val javaHomeInfo = opts.compilationServer.bloopJvm .map(JvmUtils.downloadJvm(_, options)) .getOrElse { - JvmUtils.getJavaCmdVersionOrHigher(17, options) + JvmUtils.getJavaCmdVersionOrHigher(Constants.minimumBloopJavaVersion, options) }.orExit(logger) opts.compilationServer.bloopRifleConfig( diff --git a/modules/cli/src/main/scala/scala/cli/commands/new/New.scala b/modules/cli/src/main/scala/scala/cli/commands/new/New.scala index ba07acfb25..8f09cd5d39 100644 --- a/modules/cli/src/main/scala/scala/cli/commands/new/New.scala +++ b/modules/cli/src/main/scala/scala/cli/commands/new/New.scala @@ -39,7 +39,7 @@ object New extends ScalaCommand[NewOptions] { val buildOptions = BuildOptions( javaOptions = JavaOptions( - jvmIdOpt = Some(OsLibc.baseDefaultJvm(OsLibc.jvmIndexOs, "17")).map(Positioned.none) + jvmIdOpt = Some(OsLibc.defaultJvm(OsLibc.jvmIndexOs)).map(Positioned.none) ) ) diff --git a/modules/cli/src/main/scala/scala/cli/commands/shared/SharedCompilationServerOptions.scala b/modules/cli/src/main/scala/scala/cli/commands/shared/SharedCompilationServerOptions.scala index 221c2e8bd1..91054ab969 100644 --- a/modules/cli/src/main/scala/scala/cli/commands/shared/SharedCompilationServerOptions.scala +++ b/modules/cli/src/main/scala/scala/cli/commands/shared/SharedCompilationServerOptions.scala @@ -6,7 +6,7 @@ import caseapp.* import com.github.plokhotnyuk.jsoniter_scala.core.* import com.github.plokhotnyuk.jsoniter_scala.macros.* import coursier.cache.FileCache -import coursier.core.{Version => Ver} +import coursier.core.Version as Ver import coursier.util.Task import java.io.File @@ -15,6 +15,7 @@ import java.util.Random import scala.build.internal.Util import scala.build.{Bloop, Logger, Os} +import scala.cli.commands.Constants import scala.cli.commands.bloop.BloopJson import scala.cli.commands.shared.* import scala.cli.internal.Pid @@ -86,7 +87,7 @@ final case class SharedCompilationServerOptions( bloopGlobalOptionsFile: Option[String] = None, @Group(HelpGroup.CompilationServer.toString) - @HelpMessage("JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …)") + @HelpMessage(s"JVM to use to start Bloop (e.g. 'system|${Constants.minimumBloopJavaVersion}', 'temurin:21', …)") @Hidden bloopJvm: Option[String] = None, @@ -276,7 +277,7 @@ final case class SharedCompilationServerOptions( javaOpts = (if (bloopDefaultJavaOpts) baseConfig.javaOpts else Nil) ++ bloopJavaOpt ++ bloopDefaultJvmOptions(logger).getOrElse(Nil), - minimumBloopJvm = javaV.getOrElse(17), + minimumBloopJvm = javaV.getOrElse(Constants.minimumBloopJavaVersion), retainedBloopVersion = retainedBloopVersion ) } diff --git a/modules/cli/src/main/scala/scala/cli/commands/shared/SharedOptions.scala b/modules/cli/src/main/scala/scala/cli/commands/shared/SharedOptions.scala index f3272d62ab..a905451046 100644 --- a/modules/cli/src/main/scala/scala/cli/commands/shared/SharedOptions.scala +++ b/modules/cli/src/main/scala/scala/cli/commands/shared/SharedOptions.scala @@ -568,7 +568,7 @@ final case class SharedOptions( .orElse { for (javaHome <- options.javaHomeLocationOpt()) yield { val (javaHomeVersion, javaHomeCmd) = OsLibc.javaHomeVersion(javaHome.value) - if (javaHomeVersion >= 17) + if (javaHomeVersion >= Constants.minimumBloopJavaVersion) BuildOptions.JavaHomeInfo(javaHome.value, javaHomeCmd, javaHomeVersion) else defaultJvmHome } diff --git a/modules/cli/src/main/scala/scala/cli/exportCmd/MavenProjectDescriptor.scala b/modules/cli/src/main/scala/scala/cli/exportCmd/MavenProjectDescriptor.scala index dba708e287..866782b8f9 100644 --- a/modules/cli/src/main/scala/scala/cli/exportCmd/MavenProjectDescriptor.scala +++ b/modules/cli/src/main/scala/scala/cli/exportCmd/MavenProjectDescriptor.scala @@ -295,9 +295,8 @@ final case class MavenProjectDescriptor( sourcesTest: Sources ): Either[BuildException, MavenProject] = { val jdk = - optionsMain.javaOptions.jvmIdOpt.map(_.value).getOrElse( - "17" - ) // todo: get from constants for default jdk + optionsMain.javaOptions.jvmIdOpt.map(_.value) + .getOrElse(Constants.defaultJavaVersion.toString) val projectChunks = Seq( sources(sourcesMain, sourcesTest), javaOptionsSettings(optionsMain), diff --git a/modules/cli/src/main/scala/scala/cli/javaLauncher/JavaLauncherCli.scala b/modules/cli/src/main/scala/scala/cli/javaLauncher/JavaLauncherCli.scala index 0bd770dbb2..375567a985 100644 --- a/modules/cli/src/main/scala/scala/cli/javaLauncher/JavaLauncherCli.scala +++ b/modules/cli/src/main/scala/scala/cli/javaLauncher/JavaLauncherCli.scala @@ -19,7 +19,7 @@ object JavaLauncherCli { val buildOptions = BuildOptions( javaOptions = JavaOptions( - jvmIdOpt = Some(OsLibc.baseDefaultJvm(OsLibc.jvmIndexOs, "17")).map(Positioned.none) + jvmIdOpt = Some(OsLibc.defaultJvm(OsLibc.jvmIndexOs)).map(Positioned.none) ) ) val launcherKind = sys.props.get("scala-cli.kind") match { diff --git a/modules/cli/src/main/scala/scala/cli/launcher/LauncherCli.scala b/modules/cli/src/main/scala/scala/cli/launcher/LauncherCli.scala index bfbbf6a104..f45d855c3c 100644 --- a/modules/cli/src/main/scala/scala/cli/launcher/LauncherCli.scala +++ b/modules/cli/src/main/scala/scala/cli/launcher/LauncherCli.scala @@ -52,7 +52,7 @@ object LauncherCli { val buildOptions = BuildOptions( javaOptions = JavaOptions( - jvmIdOpt = Some(OsLibc.baseDefaultJvm(OsLibc.jvmIndexOs, "17")).map(Positioned.none) + jvmIdOpt = Some(OsLibc.defaultJvm(OsLibc.jvmIndexOs)).map(Positioned.none) ) ) diff --git a/modules/core/src/main/scala/scala/build/internals/OsLibc.scala b/modules/core/src/main/scala/scala/build/internals/OsLibc.scala index fc5da35fb6..1b228c2426 100644 --- a/modules/core/src/main/scala/scala/build/internals/OsLibc.scala +++ b/modules/core/src/main/scala/scala/build/internals/OsLibc.scala @@ -61,20 +61,18 @@ object OsLibc { else default } - private def defaultJvmVersion = "17" - def baseDefaultJvm(os: String, jvmVersion: String): String = { - def java17OrHigher = Try(jvmVersion.takeWhile(_.isDigit).toInt) + def bloomMinimumJavaOrHigher = Try(jvmVersion.takeWhile(_.isDigit).toInt) .toOption - .forall(_ >= 17) + .forall(_ >= Constants.minimumBloopJavaVersion) if (os == "linux-musl") s"liberica:$jvmVersion" // zulu could work too - else if (java17OrHigher) s"temurin:$jvmVersion" + else if (bloomMinimumJavaOrHigher) s"temurin:$jvmVersion" else if (Os.isArmArchitecture) s"zulu:$jvmVersion" // adopt doesn't support Java 8 on macOS arm else s"temurin:$jvmVersion" } def defaultJvm(os: String): String = - baseDefaultJvm(os, defaultJvmVersion) + baseDefaultJvm(os, Constants.defaultJavaVersion.toString) def javaVersion(javaCmd: String): Int = { val javaVersionOutput = os.proc(javaCmd, "-version").call( diff --git a/project/deps.sc b/project/deps.sc index fb6e3d8432..c3fbf8b18f 100644 --- a/project/deps.sc +++ b/project/deps.sc @@ -1,4 +1,6 @@ -import mill._, scalalib._ +import Deps.Versions +import mill._ +import scalalib._ object Scala { def scala212 = "2.12.19" @@ -69,6 +71,12 @@ object Scala { } } +object Java { + def minimumBloopJava = 17 + def minimumInternalJava = 16 + def defaultJava = minimumBloopJava +} + // Dependencies used in integration test fixtures object TestDeps { def pprint = Deps.pprint @@ -108,7 +116,7 @@ object Deps { def maxScalaNativeForMillExport = scalaNative04 def scalaPackager = "0.1.29" def signingCli = "0.2.3" - def signingCliJvmVersion = 17 + def signingCliJvmVersion = Java.defaultJava def javaSemanticdb = "0.10.0" def javaClassName = "0.1.3" def bloop = "2.0.0-RC1" @@ -233,7 +241,7 @@ object Deps { } def graalVmVersion = "22.3.1" -def graalVmJavaVersion = 17 +def graalVmJavaVersion = Java.defaultJava def graalVmJvmId = s"graalvm-java$graalVmJavaVersion:$graalVmVersion" def csDockerVersion = Deps.Versions.coursierCli diff --git a/website/docs/reference/cli-options.md b/website/docs/reference/cli-options.md index 2e0be485eb..bd81502786 100644 --- a/website/docs/reference/cli-options.md +++ b/website/docs/reference/cli-options.md @@ -129,7 +129,7 @@ Bloop global options file ### `--bloop-jvm` [Internal] -JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …) +JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …) ### `--bloop-working-dir` diff --git a/website/docs/reference/scala-command/cli-options.md b/website/docs/reference/scala-command/cli-options.md index 1128fd5a7b..3233975c1c 100644 --- a/website/docs/reference/scala-command/cli-options.md +++ b/website/docs/reference/scala-command/cli-options.md @@ -126,7 +126,7 @@ Bloop global options file `IMPLEMENTATION specific` per Scala Runner specification -JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …) +JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …) ### `--bloop-working-dir` diff --git a/website/docs/reference/scala-command/runner-specification.md b/website/docs/reference/scala-command/runner-specification.md index 9af4054653..50823ba575 100644 --- a/website/docs/reference/scala-command/runner-specification.md +++ b/website/docs/reference/scala-command/runner-specification.md @@ -494,7 +494,7 @@ Bloop global options file **--bloop-jvm** -JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …) +JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …) **--bloop-working-dir** @@ -1257,7 +1257,7 @@ Bloop global options file **--bloop-jvm** -JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …) +JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …) **--bloop-working-dir** @@ -1852,7 +1852,7 @@ Bloop global options file **--bloop-jvm** -JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …) +JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …) **--bloop-working-dir** @@ -2471,7 +2471,7 @@ Bloop global options file **--bloop-jvm** -JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …) +JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …) **--bloop-working-dir** @@ -3099,7 +3099,7 @@ Bloop global options file **--bloop-jvm** -JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …) +JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …) **--bloop-working-dir** @@ -3685,7 +3685,7 @@ Bloop global options file **--bloop-jvm** -JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …) +JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …) **--bloop-working-dir** @@ -4346,7 +4346,7 @@ Bloop global options file **--bloop-jvm** -JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …) +JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …) **--bloop-working-dir** @@ -5014,7 +5014,7 @@ Bloop global options file **--bloop-jvm** -JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …) +JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …) **--bloop-working-dir** @@ -5947,7 +5947,7 @@ Bloop global options file **--bloop-jvm** -JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …) +JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …) **--bloop-working-dir** @@ -6226,7 +6226,7 @@ Bloop global options file **--bloop-jvm** -JVM to use to start Bloop (e.g. 'system|11', 'temurin:17', …) +JVM to use to start Bloop (e.g. 'system|17', 'temurin:21', …) **--bloop-working-dir**