diff --git a/main/src/main/scala/sbt/internal/ClassLoaders.scala b/main/src/main/scala/sbt/internal/ClassLoaders.scala index 608453f0b..0f12775ff 100644 --- a/main/src/main/scala/sbt/internal/ClassLoaders.scala +++ b/main/src/main/scala/sbt/internal/ClassLoaders.scala @@ -38,6 +38,7 @@ private[sbt] object ClassLoaders { */ private[sbt] def testTask: Def.Initialize[Task[ClassLoader]] = Def.task { val si = scalaInstance.value + val useScalaLibraryLayer = autoScalaLibrary.value val converter = fileConverter.value val cp = fullClasspath.value .map(_.data) @@ -47,17 +48,21 @@ private[sbt] object ClassLoaders { def getLm(f: File): Long = dependencyStamps.getOrElse(f, IO.getModifiedTimeOrZero(f)) val rawCP = cp.map(f => f -> getLm(f)) val fullCP = - if si.isManagedVersion then rawCP + if !useScalaLibraryLayer then rawCP + else if si.isManagedVersion then rawCP else si.libraryJars.map(j => j -> IO.getModifiedTimeOrZero(j)).toSeq ++ rawCP val exclude: Set[File] = dependencyJars(exportedProducts).value .map(converter.toPath) .map(_.toFile) - .toSet ++ si.libraryJars + .toSet ++ (if useScalaLibraryLayer then si.libraryJars.toSeq else Seq.empty) + val strategy = + if useScalaLibraryLayer then classLoaderLayeringStrategy.value + else ClassLoaderLayeringStrategy.Flat val logger = state.value.globalLogging.full val close = closeClassLoaders.value val allowZombies = allowZombieClassLoaders.value buildLayers( - strategy = classLoaderLayeringStrategy.value, + strategy = strategy, si = si, fullCP = fullCP, allDependenciesSet = dependencyJars(dependencyClasspath).value diff --git a/sbt-app/src/sbt-test/tests/autoScalaLibrary-test-loader/build.sbt b/sbt-app/src/sbt-test/tests/autoScalaLibrary-test-loader/build.sbt new file mode 100644 index 000000000..1877cc34f --- /dev/null +++ b/sbt-app/src/sbt-test/tests/autoScalaLibrary-test-loader/build.sbt @@ -0,0 +1,5 @@ +ThisBuild / scalaVersion := "2.12.21" + +Test / autoScalaLibrary := false +libraryDependencies += "org.scala-lang" % "scala-library" % scalaVersion.value % Test +libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.19" % Test diff --git a/sbt-app/src/sbt-test/tests/autoScalaLibrary-test-loader/src/test/scala/ExampleSpec.scala b/sbt-app/src/sbt-test/tests/autoScalaLibrary-test-loader/src/test/scala/ExampleSpec.scala new file mode 100644 index 000000000..bd2fe1aff --- /dev/null +++ b/sbt-app/src/sbt-test/tests/autoScalaLibrary-test-loader/src/test/scala/ExampleSpec.scala @@ -0,0 +1,8 @@ +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should.Matchers + +class ExampleSpec extends AnyFlatSpec with Matchers { + "test with autoScalaLibrary false" should "use project classpath only" in { + 1 shouldBe 1 + } +} diff --git a/sbt-app/src/sbt-test/tests/autoScalaLibrary-test-loader/test b/sbt-app/src/sbt-test/tests/autoScalaLibrary-test-loader/test new file mode 100644 index 000000000..dfffb838b --- /dev/null +++ b/sbt-app/src/sbt-test/tests/autoScalaLibrary-test-loader/test @@ -0,0 +1 @@ +> test