diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index b7b51cc0a..1ec5c34b1 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -3550,7 +3550,13 @@ object Classpaths { classifiersModule := Def.uncached(classifiersModuleTask.value), // Redefine scalaVersion and scalaBinaryVersion specifically for the dependency graph used for updateSbtClassifiers task. // to fix https://github.com/sbt/sbt/issues/2686 - scalaVersion := appConfiguration.value.provider.scalaProvider.version, + // For sbt plugins, use the Scala version corresponding to the sbt binary version being targeted. + // to fix https://github.com/sbt/sbt/issues/8026 + scalaVersion := { + val isPlugin = sbtPlugin.value + if (isPlugin) (pluginCrossBuild / scalaVersion).value + else appConfiguration.value.provider.scalaProvider.version + }, scalaBinaryVersion := binaryScalaVersion(scalaVersion.value), scalaEarlyVersion := CrossVersion.earlyScalaVersion(scalaVersion.value), scalaOrganization := ScalaArtifacts.Organization, diff --git a/sbt-app/src/sbt-test/dependency-management/i8026-update-sbt-classifiers-cross-plugin/build.sbt b/sbt-app/src/sbt-test/dependency-management/i8026-update-sbt-classifiers-cross-plugin/build.sbt new file mode 100644 index 000000000..6c097accc --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-management/i8026-update-sbt-classifiers-cross-plugin/build.sbt @@ -0,0 +1,18 @@ +// Test for https://github.com/sbt/sbt/issues/8026 +// When building sbt plugins with explicit scalaVersion set, +// updateSbtClassifiers should use the correct Scala version for the sbt version. + +lazy val root = (project in file(".")) + .enablePlugins(SbtPlugin) + .settings( + name := "test-sbt-cross-build", + + // Explicitly set scala version - this is what caused the issue in #8026 + // When scalaVersion is explicitly set, updateSbtClassifiers was using the + // launcher's Scala version instead of the plugin's Scala version. + // Before the fix, this would fail with: + // Error downloading org.scala-sbt:scripted-plugin_2.12:0.13.17 + // because it used the launcher's Scala version (2.12) instead of the + // plugin's target Scala version derived from sbt binary version. + scalaVersion := "2.12.21", + ) diff --git a/sbt-app/src/sbt-test/dependency-management/i8026-update-sbt-classifiers-cross-plugin/project/build.sbt b/sbt-app/src/sbt-test/dependency-management/i8026-update-sbt-classifiers-cross-plugin/project/build.sbt new file mode 100644 index 000000000..b090aa9d7 --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-management/i8026-update-sbt-classifiers-cross-plugin/project/build.sbt @@ -0,0 +1 @@ +ThisBuild / pluginCrossBuild / sbtVersion := "2.0.0" diff --git a/sbt-app/src/sbt-test/dependency-management/i8026-update-sbt-classifiers-cross-plugin/test b/sbt-app/src/sbt-test/dependency-management/i8026-update-sbt-classifiers-cross-plugin/test new file mode 100644 index 000000000..00ad751bf --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-management/i8026-update-sbt-classifiers-cross-plugin/test @@ -0,0 +1 @@ +> updateSbtClassifiers