[2.0.x] fix: Fixes managedScalaInstance false support (#9121) (#9124)

**Problem**
When managedScalaInstance is set to false, we stopped creating
ScalaInstance, but the documentation says the user can
pull in their own dependencies.

**Solution**
Attempt to construct a ScalaInstance from update report
even when managedScalaInstance is set to false.
This commit is contained in:
eugene yokota 2026-04-23 03:19:20 -04:00 committed by GitHub
parent 5de1057488
commit 9e2cc51579
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 35 additions and 8 deletions

View File

@ -771,9 +771,8 @@ object Defaults extends BuildCommon {
scalaCompilerBridgeBin := Def scalaCompilerBridgeBin := Def
.ifS(Def.task { .ifS(Def.task {
val sv = scalaVersion.value val sv = scalaVersion.value
val managed = managedScalaInstance.value
val hasSbtBridge = ScalaArtifacts.isScala3(sv) || ZincLmUtil.hasScala2SbtBridge(sv) val hasSbtBridge = ScalaArtifacts.isScala3(sv) || ZincLmUtil.hasScala2SbtBridge(sv)
hasSbtBridge && managed hasSbtBridge
})(Def.cachedTask { })(Def.cachedTask {
// Use scalaDynVersion to resolve dynamic versions (e.g., "3-latest.candidate" -> "3.8.1-RC1") // Use scalaDynVersion to resolve dynamic versions (e.g., "3-latest.candidate" -> "3.8.1-RC1")
val sv = scalaDynVersion.value val sv = scalaDynVersion.value

View File

@ -62,12 +62,14 @@ object Compiler:
val sh = Keys.scalaHome.value val sh = Keys.scalaHome.value
val app = Keys.appConfiguration.value val app = Keys.appConfiguration.value
val managed = Keys.managedScalaInstance.value val managed = Keys.managedScalaInstance.value
sh match val configs = Keys.ivyConfigurations.value
case Some(h) => scalaInstanceConfigFromHome(h) (sh, extraToolConf) match
case _ => case (Some(h), _) => scalaInstanceConfigFromHome(h)
val scalaProvider = app.provider.scalaProvider case _ if !managed =>
if !managed then emptyScalaInstanceConfig val extra = extraToolConf.getOrElse(Configurations.ScalaTool)
else scalaInstanceConfigFromUpdate(extraToolConf) if configs.contains(extra) then scalaInstanceConfigFromUpdate(extraToolConf)
else emptyScalaInstanceConfig
case _ => scalaInstanceConfigFromUpdate(extraToolConf)
} }
/** /**

View File

@ -0,0 +1,5 @@
package example
class A {
val x = 1
}

View File

@ -0,0 +1,18 @@
import Configurations.{ ScalaTool, ScalaDocTool }
@transient
lazy val check = taskKey[Unit]("")
lazy val scala213 = "2.13.16"
scalaVersion := scala213
autoScalaLibrary := false
managedScalaInstance := false
ivyConfigurations ++= List(ScalaTool, ScalaDocTool)
libraryDependencies ++= Seq(
"org.scala-lang" % "scala-library" % scala213,
"org.scala-lang" % "scala-compiler" % scala213 % ScalaTool,
"org.scala-lang" % "scala-compiler" % scala213 % ScalaDocTool,
)
check := {
val si = scalaInstance.value
assert(si.version == scala213, s"'${si.version}' was not '$scala213'")
}

View File

@ -0,0 +1,3 @@
> compile
> doc
> check