diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index ff7268019..2f2c1b643 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -769,9 +769,8 @@ object Defaults extends BuildCommon with DefExtra { scalaCompilerBridgeBin := Def .ifS(Def.task { val sv = scalaVersion.value - val managed = managedScalaInstance.value val hasSbtBridge = ScalaArtifacts.isScala3(sv) || ScalaArtifacts.hasScala2SbtBridge(sv) - hasSbtBridge && managed + hasSbtBridge })(Compiler.compilerBridgeFromUpdate)(Def.task(Vector.empty)) .value, scalaCompilerBridgeJars := (Def.taskDyn { diff --git a/main/src/main/scala/sbt/internal/Compiler.scala b/main/src/main/scala/sbt/internal/Compiler.scala index a7e2d860c..e3fe39b52 100644 --- a/main/src/main/scala/sbt/internal/Compiler.scala +++ b/main/src/main/scala/sbt/internal/Compiler.scala @@ -64,12 +64,14 @@ object Compiler: val sh = Keys.scalaHome.value val app = Keys.appConfiguration.value val managed = Keys.managedScalaInstance.value - sh match - case Some(h) => scalaInstanceConfigFromHome(h) - case _ => - val scalaProvider = app.provider.scalaProvider - if !managed then emptyScalaInstanceConfig - else scalaInstanceConfigFromUpdate(extraToolConf) + val configs = Keys.ivyConfigurations.value + (sh, extraToolConf) match + case (Some(h), _) => scalaInstanceConfigFromHome(h) + case _ if !managed => + val extra = extraToolConf.getOrElse(Configurations.ScalaTool) + if configs.contains(extra) then scalaInstanceConfigFromUpdate(extraToolConf) + else emptyScalaInstanceConfig + case _ => scalaInstanceConfigFromUpdate(extraToolConf) } /** diff --git a/sbt-app/src/sbt-test/project/scala-instance/A.scala b/sbt-app/src/sbt-test/project/scala-instance/A.scala new file mode 100644 index 000000000..35cd702de --- /dev/null +++ b/sbt-app/src/sbt-test/project/scala-instance/A.scala @@ -0,0 +1,5 @@ +package example + +class A { + val x = 1 +} diff --git a/sbt-app/src/sbt-test/project/scala-instance/build.sbt b/sbt-app/src/sbt-test/project/scala-instance/build.sbt new file mode 100644 index 000000000..2eff52a1f --- /dev/null +++ b/sbt-app/src/sbt-test/project/scala-instance/build.sbt @@ -0,0 +1,19 @@ +import Configurations.{ ScalaTool, ScalaDocTool, ZincTool } + +@transient +lazy val check = taskKey[Unit]("") +lazy val scala213 = "2.13.16" +scalaVersion := scala213 +autoScalaLibrary := false +managedScalaInstance := false +ivyConfigurations ++= List(ScalaTool, ScalaDocTool, ZincTool) +libraryDependencies ++= Seq( + "org.scala-lang" % "scala-library" % scala213, + "org.scala-lang" % "scala-compiler" % scala213 % ScalaTool, + "org.scala-lang" % "scala-compiler" % scala213 % ScalaDocTool, + "org.scala-lang" % "scala2-sbt-bridge" % scala213 % ZincTool, +) +check := { + val si = scalaInstance.value + assert(si.version == scala213, s"'${si.version}' was not '$scala213'") +} diff --git a/sbt-app/src/sbt-test/project/scala-instance/test b/sbt-app/src/sbt-test/project/scala-instance/test new file mode 100644 index 000000000..58d9fc878 --- /dev/null +++ b/sbt-app/src/sbt-test/project/scala-instance/test @@ -0,0 +1,3 @@ +> compile +> doc +> check