diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 18a4ac4d2..4f638203b 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -4702,9 +4702,11 @@ object Classpaths: val app = appConfiguration.value def isJansiOrJLine(f: File) = f.getName.contains("jline") || f.getName.contains("jansi") val scalaInstanceJars = app.provider.scalaProvider.jars.filterNot(isJansiOrJLine) + // Sorted for the same reason as the metabuild classpath in `Load`. val sbtCp = (scalaInstanceJars ++ app.provider.mainClasspath) .map(_.toPath) .map(p => converter.toVirtualFile(p): HashedVirtualFileRef) + .sortBy(_.id) .map(Attributed.blank) val cpConfig = classpathConfiguration.value val up = update.value diff --git a/main/src/main/scala/sbt/internal/Load.scala b/main/src/main/scala/sbt/internal/Load.scala index 974aca615..d365b7557 100755 --- a/main/src/main/scala/sbt/internal/Load.scala +++ b/main/src/main/scala/sbt/internal/Load.scala @@ -100,8 +100,9 @@ private[sbt] object Load: val loader = getClass.getClassLoader val converter = MappedFileConverter(rootPaths, true) val cp0 = provider.mainClasspath.toIndexedSeq ++ scalaProvider.jars.toIndexedSeq + // The launcher's order is a directory listing, and this classpath is hashed into the compile key. val classpath = Attributed.blankSeq( - cp0.map(_.toPath).map(p => converter.toVirtualFile(p): HashedVirtualFileRef) + cp0.map(_.toPath).map(p => converter.toVirtualFile(p): HashedVirtualFileRef).sortBy(_.id) ) val csrConfig = CoursierConfiguration() .withResolvers(Resolver.combineDefaultResolvers(Vector.empty).toVector)