diff --git a/main/src/main/scala/sbt/Cross.scala b/main/src/main/scala/sbt/Cross.scala index 73b4cadec..86b31ff59 100644 --- a/main/src/main/scala/sbt/Cross.scala +++ b/main/src/main/scala/sbt/Cross.scala @@ -339,16 +339,18 @@ object Cross { ) } } - } else { - val binaryVersion = CrossVersion.binaryScalaVersion(version) + } else + // This is the default implementation for ++ + // It checks that is backward compatible with one of the Scala versions listed + // in crossScalaVersions setting. Note this must account for the fact that in Scala 3.x + // 3.1.0 is not compatible with 3.0.0. projectScalaVersions.map { case (project, scalaVersions) => - if (scalaVersions.exists(v => CrossVersion.binaryScalaVersion(v) == binaryVersion)) + if (scalaVersions.exists(CrossVersion.isScalaBinaryCompatibleWith(version, _))) (project, Some(version), scalaVersions) else (project, None, scalaVersions) } - } } val included = projects.collect { diff --git a/notes/1.7.0/cross-strict-aggregation-scala-3.md b/notes/1.7.0/cross-strict-aggregation-scala-3.md new file mode 100644 index 000000000..8e00c2422 --- /dev/null +++ b/notes/1.7.0/cross-strict-aggregation-scala-3.md @@ -0,0 +1,8 @@ +[@ruippeixotog]: https://github.com/ruippeixotog + +[#6915]: https://github.com/sbt/sbt/issues/6915 +[#6926]: https://github.com/sbt/sbt/pull/6926 + +### Bug Fixes + +- Make `++ ` run `` only on compatible Scala 3 subprojects. [#6915][]/[#6926][] by [@ruippeixotog][] diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 991e96b03..6d3e3f63a 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -14,7 +14,7 @@ object Dependencies { // sbt modules private val ioVersion = nightlyVersion.getOrElse("1.6.0") private val lmVersion = - sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.7.0-M1") + sys.props.get("sbt.build.lm.version").orElse(nightlyVersion).getOrElse("1.7.0-M3") val zincVersion = nightlyVersion.getOrElse("1.7.0-M2") private val sbtIO = "org.scala-sbt" %% "io" % ioVersion diff --git a/sbt-app/src/sbt-test/actions/cross-strict-aggregation-scala-3/build.sbt b/sbt-app/src/sbt-test/actions/cross-strict-aggregation-scala-3/build.sbt new file mode 100644 index 000000000..d5cf2f898 --- /dev/null +++ b/sbt-app/src/sbt-test/actions/cross-strict-aggregation-scala-3/build.sbt @@ -0,0 +1,14 @@ +scalaVersion := "2.12.16" + +lazy val core = project + .settings( + crossScalaVersions := Seq("2.12.16", "3.0.2", "3.1.2") + ) + +lazy val subproj = project + .dependsOn(core) + .settings( + crossScalaVersions := Seq("2.12.16", "3.1.2"), + // a random library compiled against Scala 3.1 + libraryDependencies += "org.http4s" %% "http4s-core" % "0.23.12" + ) diff --git a/sbt-app/src/sbt-test/actions/cross-strict-aggregation-scala-3/subproj/src/main/scala/A.scala b/sbt-app/src/sbt-test/actions/cross-strict-aggregation-scala-3/subproj/src/main/scala/A.scala new file mode 100644 index 000000000..da95b9fc4 --- /dev/null +++ b/sbt-app/src/sbt-test/actions/cross-strict-aggregation-scala-3/subproj/src/main/scala/A.scala @@ -0,0 +1,6 @@ +import org.http4s.Uri + +object A { + // Just using something from http4s + Uri.fromString("example.com") +} diff --git a/sbt-app/src/sbt-test/actions/cross-strict-aggregation-scala-3/test b/sbt-app/src/sbt-test/actions/cross-strict-aggregation-scala-3/test new file mode 100644 index 000000000..ea7afbf93 --- /dev/null +++ b/sbt-app/src/sbt-test/actions/cross-strict-aggregation-scala-3/test @@ -0,0 +1,14 @@ +> ++3.0.2 compile + +$ exists core/target/scala-3.0.2 +-$ exists core/target/scala-3.1.2 +-$ exists subproj/target/scala-3.0.2 +-$ exists subproj/target/scala-3.1.2 + +> clean +> ++3.1.2 compile + +-$ exists core/target/scala-3.0.2 +$ exists core/target/scala-3.1.2 +-$ exists subproj/target/scala-3.0.2 +$ exists subproj/target/scala-3.1.2