From 724b8cebef747a87fe4fdcee05decb0d52877c9f Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 21 Aug 2025 14:11:23 +0200 Subject: [PATCH] scala-library 3.8.0 support **Problem** Scala 3.8.0 nightly and later in-sources the scala-library for the use by Scala 3, as opposed to using Scala-2.13-bound standard library. This means that we will run into situations where scala-library should NOT align with scala-reflect, which might exist transitively. **Solution** Adjust the csrSameVersions rule for Scala 3.8 so it will only try to keep scala-library and scala3-library versions aligned. --- main/src/main/scala/sbt/Defaults.scala | 19 ++++++++++++++++--- project/Dependencies.scala | 2 +- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index cef243bb4..8af12defd 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -268,9 +268,7 @@ object Defaults extends BuildCommon { csrMavenProfiles :== Set.empty, csrReconciliations :== LMCoursier.relaxedForAllModules, csrMavenDependencyOverride :== false, - csrSameVersions := Seq( - ScalaArtifacts.Artifacts.map(a => InclExclRule(scalaOrganization.value, a)).toSet - ), + csrSameVersions :== Nil, stagingDirectory := (ThisBuild / baseDirectory).value / "target" / "sona-staging", localStaging := Some(Resolver.file("local-staging", stagingDirectory.value)), sonaBundle := Publishing @@ -3245,6 +3243,21 @@ object Classpaths { (proj +: base).distinct } }).value, + csrSameVersions ++= { + partialVersion(scalaVersion.value) match { + // See https://github.com/sbt/sbt/issues/8224 + // Scala 3.8+ should align only Scala3_8Artifacts + case Some((3, minor)) if minor >= 8 => + ScalaArtifacts.Scala3_8Artifacts + .map(a => InclExclRule(scalaOrganization.value, a)) + .toSet :: Nil + case Some((major, minor)) if major == 2 || major == 3 => + ScalaArtifacts.Artifacts + .map(a => InclExclRule(scalaOrganization.value, a)) + .toSet :: Nil + case _ => Nil + } + }, moduleName := normalizedName.value, ivyPaths := IvyPaths(baseDirectory.value, bootIvyHome(appConfiguration.value)), csrCacheDirectory := { diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 6147eb617..aaedaaad5 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -14,7 +14,7 @@ object Dependencies { // sbt modules private val ioVersion = nightlyVersion.getOrElse("1.10.5") private val lmVersion = - sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.11.3") + sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.11.4") val zincVersion = nightlyVersion.getOrElse("1.10.8") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion