diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 75480be5b9..8969b642a6 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -718,14 +718,7 @@ object Defaults extends BuildCommon { CrossVersion(scalaV, binVersion)(base).withCrossVersion(Disabled()) }, crossSbtVersions := Vector((pluginCrossBuild / sbtVersion).value), - crossTarget := makeCrossTarget( - target.value, - scalaVersion.value, - scalaBinaryVersion.value, - (pluginCrossBuild / sbtBinaryVersion).value, - sbtPlugin.value, - crossPaths.value - ), + crossTarget := target.value, cleanIvy := IvyActions.cleanCachedResolutionCache(ivyModule.value, streams.value.log), clean := clean.dependsOnTask(cleanIvy).value, scalaCompilerBridgeBinaryJar := Def.settingDyn { @@ -4697,7 +4690,7 @@ trait BuildExtra extends BuildCommon with DefExtra { libraryDependencies += compilerPlugin(dependency) /** Constructs a setting that declares a new artifact `a` that is generated by `taskDef`. */ - def addArtifact(a: Artifact, taskDef: TaskKey[VirtualFile]): SettingsDefinition = { + def addArtifact(a: Artifact, taskDef: TaskKey[HashedVirtualFileRef]): SettingsDefinition = { val pkgd = packagedArtifacts := packagedArtifacts.value.updated(a, taskDef.value) Seq(artifacts += a, pkgd) } @@ -4705,10 +4698,10 @@ trait BuildExtra extends BuildCommon with DefExtra { /** Constructs a setting that declares a new artifact `artifact` that is generated by `taskDef`. */ def addArtifact( artifact: Initialize[Artifact], - taskDef: Initialize[Task[VirtualFile]] + taskDef: Initialize[Task[HashedVirtualFileRef]] ): SettingsDefinition = { val artLocal = SettingKey.local[Artifact] - val taskLocal = TaskKey.local[VirtualFile] + val taskLocal = TaskKey.local[HashedVirtualFileRef] val art = artifacts := artLocal.value +: artifacts.value val pkgd = packagedArtifacts := packagedArtifacts.value.updated(artLocal.value, taskLocal.value) Seq(artLocal := artifact.value, taskLocal := taskDef.value, art, pkgd) diff --git a/notes/2.0.0/migration.md b/notes/2.0.0/migration.md new file mode 100644 index 0000000000..18dd31853c --- /dev/null +++ b/notes/2.0.0/migration.md @@ -0,0 +1,8 @@ + + +## files extension on Classpath + +```scala ++ given FileConverter = fileConverter.value + val cp = (Compile / classpath).value.files +``` diff --git a/sbt-app/src/main/scala/sbt/Import.scala b/sbt-app/src/main/scala/sbt/Import.scala index 41eb0ba86f..25450d9d8e 100644 --- a/sbt-app/src/main/scala/sbt/Import.scala +++ b/sbt-app/src/main/scala/sbt/Import.scala @@ -366,5 +366,7 @@ trait Import { type IvyPaths = sbt.librarymanagement.ivy.IvyPaths val IvyPaths = sbt.librarymanagement.ivy.IvyPaths + type FileConverter = xsbti.FileConverter + type HashedVirtualFileRef = xsbti.HashedVirtualFileRef type IncOptions = xsbti.compile.IncOptions } diff --git a/sbt-app/src/sbt-test/dependency-management/artifact/build.sbt b/sbt-app/src/sbt-test/dependency-management/artifact/build.sbt index c9cec1c990..49745392fa 100644 --- a/sbt-app/src/sbt-test/dependency-management/artifact/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/artifact/build.sbt @@ -28,7 +28,11 @@ lazy val root = (project in file(".")) Compile / packageBin / artifact := mainArtifact, libraryDependencies ++= (if (baseDirectory.value / "retrieve").exists then publishedID :: Nil else Nil), // needed to add a jar with a different type to the managed classpath - Compile / unmanagedClasspath ++= scalaInstance.value.libraryJars.toSeq, + Compile / unmanagedClasspath ++= { + val converter = fileConverter.value + val xs = scalaInstance.value.libraryJars.toSeq + xs.map(x => converter.toVirtualFile(x.toPath()): HashedVirtualFileRef) + }, classpathTypes := Set(tpe), // custom configuration artifacts @@ -66,7 +70,8 @@ def retrieveID = org % "test-retrieve" % "2.0" def checkTask(classpath: TaskKey[Classpath]) = Def.task { val deps = libraryDependencies.value - val cp = (Compile / classpath).value.files + given FileConverter = fileConverter.value + val cp = (Compile / classpath).value.files.map(_.toFile()) val loader = ClasspathUtilities.toLoader(cp, scalaInstance.value.loader) try { Class.forName("test.Test", false, loader); () } catch { case _: ClassNotFoundException | _: NoClassDefFoundError => sys.error(s"Dependency not retrieved properly: $deps, $cp") } diff --git a/sbt-app/src/sbt-test/dependency-management/auto-scala-library/build.sbt b/sbt-app/src/sbt-test/dependency-management/auto-scala-library/build.sbt index 2d2277c176..fa156a1062 100644 --- a/sbt-app/src/sbt-test/dependency-management/auto-scala-library/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/auto-scala-library/build.sbt @@ -7,7 +7,7 @@ val checkScalaLibrary = TaskKey[Unit]("checkScalaLibrary") checkScalaLibrary := { val scalaLibsJars = (Compile / managedClasspath) .value - .map(_.data.getName) + .map(_.data.name) .filter(_.startsWith("scala-library")) .sorted val expectedScalaLibsJars = Seq( diff --git a/sbt-app/src/sbt-test/dependency-management/cached-resolution-circular/changes/multi.sbt b/sbt-app/src/sbt-test/dependency-management/cached-resolution-circular/changes/multi.sbt index 1616498cc2..46ef805489 100644 --- a/sbt-app/src/sbt-test/dependency-management/cached-resolution-circular/changes/multi.sbt +++ b/sbt-app/src/sbt-test/dependency-management/cached-resolution-circular/changes/multi.sbt @@ -54,7 +54,7 @@ lazy val root = (project in file(".")). settings(commonSettings: _*). settings( check := { - val acp = (a / Compile / externalDependencyClasspath).value.map {_.data.getName}.sorted + val acp = (a / Compile / externalDependencyClasspath).value.map {_.data.name}.sorted if (!(acp contains "netty-3.2.0.Final.jar")) { sys.error("netty-3.2.0.Final not found when it should be included: " + acp.toString) } diff --git a/sbt-app/src/sbt-test/dependency-management/cached-resolution-classifier/multi.sbt b/sbt-app/src/sbt-test/dependency-management/cached-resolution-classifier/multi.sbt index eaa3d983a2..0b97c5ab17 100644 --- a/sbt-app/src/sbt-test/dependency-management/cached-resolution-classifier/multi.sbt +++ b/sbt-app/src/sbt-test/dependency-management/cached-resolution-classifier/multi.sbt @@ -70,9 +70,9 @@ lazy val root = (project in file(".")). (ThisBuild / organization) := "org.example", (ThisBuild / version) := "1.0", check := { - val acp = (a / Compile / externalDependencyClasspath).value.map {_.data.getName}.sorted - val bcp = (b / Compile / externalDependencyClasspath).value.map {_.data.getName}.sorted - val ccp = (c / Compile / externalDependencyClasspath).value.map {_.data.getName}.sorted filterNot { _ == "demo_2.10.jar"} + val acp = (a / Compile / externalDependencyClasspath).value.map {_.data.name}.sorted + val bcp = (b / Compile / externalDependencyClasspath).value.map {_.data.name}.sorted + val ccp = (c / Compile / externalDependencyClasspath).value.map {_.data.name}.sorted filterNot { _ == "demo_2.10.jar"} if (!(acp contains "commons-io-1.4-sources.jar")) { sys.error("commons-io-1.4-sources not found when it should be included: " + acp.toString) } @@ -90,9 +90,9 @@ lazy val root = (project in file(".")). "\n - b (plain) " + bcpWithoutSource.toString + "\n - c (inter-project) " + ccpWithoutSource.toString) - val atestcp = (a / Test / externalDependencyClasspath).value.map {_.data.getName}.sorted filterNot { _ == "commons-io-1.4.jar"} - val btestcp = (b / Test / externalDependencyClasspath).value.map {_.data.getName}.sorted filterNot { _ == "commons-io-1.4.jar"} - val ctestcp = (c / Test / externalDependencyClasspath).value.map {_.data.getName}.sorted filterNot { _ == "demo_2.10.jar"} filterNot { _ == "commons-io-1.4.jar"} + val atestcp = (a / Test / externalDependencyClasspath).value.map {_.data.name}.sorted filterNot { _ == "commons-io-1.4.jar"} + val btestcp = (b / Test / externalDependencyClasspath).value.map {_.data.name}.sorted filterNot { _ == "commons-io-1.4.jar"} + val ctestcp = (c / Test / externalDependencyClasspath).value.map {_.data.name}.sorted filterNot { _ == "demo_2.10.jar"} filterNot { _ == "commons-io-1.4.jar"} if (ctestcp contains "junit-4.13.1.jar") { sys.error("junit found when it should be excluded: " + ctestcp.toString) } diff --git a/sbt-app/src/sbt-test/dependency-management/cached-resolution-conflicts/multi.sbt b/sbt-app/src/sbt-test/dependency-management/cached-resolution-conflicts/multi.sbt index ed8b6cd228..9a5e0fa117 100644 --- a/sbt-app/src/sbt-test/dependency-management/cached-resolution-conflicts/multi.sbt +++ b/sbt-app/src/sbt-test/dependency-management/cached-resolution-conflicts/multi.sbt @@ -45,7 +45,7 @@ val y2 = project.settings( ) TaskKey[Unit]("check") := { - val x1cp = (x1 / Compile / externalDependencyClasspath).value.map(_.data.getName).sorted + val x1cp = (x1 / Compile / externalDependencyClasspath).value.map(_.data.name).sorted def x1cpStr = x1cp.mkString("\n* ", "\n* ", "") // if (!(x1cp contains "slf4j-api-1.6.6.jar")) diff --git a/sbt-app/src/sbt-test/dependency-management/cached-resolution-exclude/multi.sbt b/sbt-app/src/sbt-test/dependency-management/cached-resolution-exclude/multi.sbt index 8a5dc14e31..7490e74434 100644 --- a/sbt-app/src/sbt-test/dependency-management/cached-resolution-exclude/multi.sbt +++ b/sbt-app/src/sbt-test/dependency-management/cached-resolution-exclude/multi.sbt @@ -38,16 +38,16 @@ lazy val root = (project in file(".")). version := "1.0", updateOptions := updateOptions.value.withCachedResolution(true), check := { - val acp = (a / Compile / externalDependencyClasspath).value.sortBy {_.data.getName} - val bcp = (b / Compile / externalDependencyClasspath).value.sortBy {_.data.getName} - if (acp exists { _.data.getName contains "commons-io" }) { + val acp = (a / Compile / externalDependencyClasspath).value.sortBy {_.data.name} + val bcp = (b / Compile / externalDependencyClasspath).value.sortBy {_.data.name} + if (acp exists { _.data.name contains "commons-io" }) { sys.error("commons-io found when it should be excluded") } - if (acp exists { _.data.getName contains "commons-codec" }) { + if (acp exists { _.data.name contains "commons-codec" }) { sys.error("commons-codec found when it should be excluded") } // This is checking to make sure excluded graph is not getting picked up - if (!(bcp exists { _.data.getName contains "commons-io" })) { + if (!(bcp exists { _.data.name contains "commons-io" })) { sys.error("commons-io NOT found when it should NOT be excluded") } } diff --git a/sbt-app/src/sbt-test/dependency-management/cached-resolution-force/multi.sbt b/sbt-app/src/sbt-test/dependency-management/cached-resolution-force/multi.sbt index 5b15fc6fe0..4f09e7eb7f 100644 --- a/sbt-app/src/sbt-test/dependency-management/cached-resolution-force/multi.sbt +++ b/sbt-app/src/sbt-test/dependency-management/cached-resolution-force/multi.sbt @@ -67,33 +67,33 @@ lazy val root = (project in file(".")). ThisBuild / version := "1.0", check := { // sys.error(dependencyCacheDirectory.value.toString) - val acp = (a / Compile / externalDependencyClasspath).value.sortBy {_.data.getName} - val bcp = (b / Compile / externalDependencyClasspath).value.sortBy {_.data.getName} - val ccp = (c / Compile / externalDependencyClasspath).value.sortBy {_.data.getName} - val dcp = (d / Compile / externalDependencyClasspath).value.sortBy {_.data.getName} + val acp = (a / Compile / externalDependencyClasspath).value.sortBy {_.data.name} + val bcp = (b / Compile / externalDependencyClasspath).value.sortBy {_.data.name} + val ccp = (c / Compile / externalDependencyClasspath).value.sortBy {_.data.name} + val dcp = (d / Compile / externalDependencyClasspath).value.sortBy {_.data.name} - if (!(acp exists {_.data.getName contains "spring-core-3.2.2.RELEASE"})) { + if (!(acp exists {_.data.name contains "spring-core-3.2.2.RELEASE"})) { sys.error("spring-core-3.2.2 is not found on a") } - if (!(bcp exists {_.data.getName contains "spring-core-3.2.2.RELEASE"})) { + if (!(bcp exists {_.data.name contains "spring-core-3.2.2.RELEASE"})) { sys.error("spring-core-3.2.2 is not found on b") } - if (!(ccp exists {_.data.getName contains "spring-core-3.2.2.RELEASE"})) { + if (!(ccp exists {_.data.name contains "spring-core-3.2.2.RELEASE"})) { sys.error("spring-core-3.2.2 is not found on c") } - if (!(dcp exists {_.data.getName contains "spring-core-3.2.2.RELEASE"})) { + if (!(dcp exists {_.data.name contains "spring-core-3.2.2.RELEASE"})) { sys.error("spring-core-3.2.2 is not found on d\n" + dcp.toString) } - if (!(acp exists {_.data.getName contains "spring-tx-3.1.2.RELEASE"})) { + if (!(acp exists {_.data.name contains "spring-tx-3.1.2.RELEASE"})) { sys.error("spring-tx-3.1.2 is not found on a") } - if (!(bcp exists {_.data.getName contains "spring-tx-3.1.2.RELEASE"})) { + if (!(bcp exists {_.data.name contains "spring-tx-3.1.2.RELEASE"})) { sys.error("spring-tx-3.1.2 is not found on b") } - if (!(ccp exists {_.data.getName contains "spring-tx-3.1.2.RELEASE"})) { + if (!(ccp exists {_.data.name contains "spring-tx-3.1.2.RELEASE"})) { sys.error("spring-tx-3.1.2 is not found on c") } - if (!(dcp exists {_.data.getName contains "spring-tx-3.1.2.RELEASE"})) { + if (!(dcp exists {_.data.name contains "spring-tx-3.1.2.RELEASE"})) { sys.error("spring-tx-3.1.2 is not found on d") } if (acp == bcp) () diff --git a/sbt-app/src/sbt-test/dependency-management/cached-resolution-interproj/multi.sbt b/sbt-app/src/sbt-test/dependency-management/cached-resolution-interproj/multi.sbt index 9262d8e125..1e4757556d 100644 --- a/sbt-app/src/sbt-test/dependency-management/cached-resolution-interproj/multi.sbt +++ b/sbt-app/src/sbt-test/dependency-management/cached-resolution-interproj/multi.sbt @@ -40,9 +40,9 @@ lazy val root = (project in file(".")). updateOptions := updateOptions.value.withCachedResolution(true), check := { val ur = (a / update).value - val acp = (a / Compile / externalDependencyClasspath).value.map {_.data.getName} + val acp = (a / Compile / externalDependencyClasspath).value.map {_.data.name} val atestcp0 = (a / Test / fullClasspath).value - val atestcp = (a / Test / externalDependencyClasspath).value.map {_.data.getName} + val atestcp = (a / Test / externalDependencyClasspath).value.map {_.data.name} // This is checking to make sure interproject dependency works if (acp exists { _ contains "scalatest" }) { sys.error("scalatest found when it should NOT be included: " + acp.toString) diff --git a/sbt-app/src/sbt-test/dependency-management/cached-resolution-overrides/multi.sbt b/sbt-app/src/sbt-test/dependency-management/cached-resolution-overrides/multi.sbt index b30a351854..a7803263ef 100644 --- a/sbt-app/src/sbt-test/dependency-management/cached-resolution-overrides/multi.sbt +++ b/sbt-app/src/sbt-test/dependency-management/cached-resolution-overrides/multi.sbt @@ -43,8 +43,8 @@ lazy val b = project. lazy val root = (project in file(".")). settings( check := { - val acp = (a / Compile / externalDependencyClasspath).value.sortBy {_.data.getName} - val bcp = (b / Compile / externalDependencyClasspath).value.sortBy {_.data.getName} + val acp = (a / Compile / externalDependencyClasspath).value.sortBy {_.data.name} + val bcp = (b / Compile / externalDependencyClasspath).value.sortBy {_.data.name} if (acp == bcp) () else sys.error("Different classpaths are found:" + "\n - a (overrides + cached) " + acp.toString + diff --git a/sbt-app/src/sbt-test/dependency-management/cross-ivy-maven/build.sbt b/sbt-app/src/sbt-test/dependency-management/cross-ivy-maven/build.sbt index c323436dbe..0e0d5e0f9a 100644 --- a/sbt-app/src/sbt-test/dependency-management/cross-ivy-maven/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/cross-ivy-maven/build.sbt @@ -12,6 +12,6 @@ TaskKey[Unit]("check") := { def isTestJar(n: String): Boolean = (n contains "scalacheck") || (n contains "specs2") - val testLibs = cp map (_.data.getName) filter isTestJar + val testLibs = cp map (_.data.name) filter isTestJar assert(testLibs.isEmpty, s"Compile Classpath has test libs:\n * ${testLibs.mkString("\n * ")}") } \ No newline at end of file diff --git a/sbt-app/src/sbt-test/dependency-management/exclude-dependencies/build.sbt b/sbt-app/src/sbt-test/dependency-management/exclude-dependencies/build.sbt index e9e171f3af..11e6759876 100644 --- a/sbt-app/src/sbt-test/dependency-management/exclude-dependencies/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/exclude-dependencies/build.sbt @@ -26,13 +26,13 @@ lazy val root = (project in file(".")). check := { (a / update).value (b / update).value - val acp = (a / Compile / externalDependencyClasspath).value.sortBy {_.data.getName} - val bcp = (b / Compile / externalDependencyClasspath).value.sortBy {_.data.getName} + val acp = (a / Compile / externalDependencyClasspath).value.sortBy {_.data.name} + val bcp = (b / Compile / externalDependencyClasspath).value.sortBy {_.data.name} - if (acp exists { _.data.getName contains "slf4j-api-1.7.5.jar" }) { + if (acp exists { _.data.name contains "slf4j-api-1.7.5.jar" }) { sys.error("slf4j-api-1.7.5.jar found when it should NOT be included: " + acp.toString) } - if (bcp exists { _.data.getName contains "dispatch-core_2.11-0.11.1.jar" }) { + if (bcp exists { _.data.name contains "dispatch-core_2.11-0.11.1.jar" }) { sys.error("dispatch-core_2.11-0.11.1.jar found when it should NOT be included: " + bcp.toString) } diff --git a/sbt-app/src/sbt-test/dependency-management/exclude-scala/build.sbt b/sbt-app/src/sbt-test/dependency-management/exclude-scala/build.sbt index 50a29e584c..549a1c14d9 100644 --- a/sbt-app/src/sbt-test/dependency-management/exclude-scala/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/exclude-scala/build.sbt @@ -11,13 +11,16 @@ lazy val root = (project in file(".")). scalaOverride := check("scala.App").value ) -def check(className: String): Def.Initialize[Task[Unit]] = (Compile / fullClasspath) map { cp => - val existing = cp.files.filter(_.getName contains "scala-library") - println("Full classpath: " + cp.mkString("\n\t", "\n\t", "")) - println("scala-library.jar: " + existing.mkString("\n\t", "\n\t", "")) - val loader = ClasspathUtilities.toLoader(existing) - Class.forName(className, false, loader) -} +def check(className: String): Def.Initialize[Task[Unit]] = + import sbt.TupleSyntax.* + (Compile / fullClasspath, fileConverter.toTaskable) mapN { (cp, c) => + given FileConverter = c + val existing = cp.files.filter(_.toFile.getName contains "scala-library") + println("Full classpath: " + cp.mkString("\n\t", "\n\t", "")) + println("scala-library.jar: " + existing.mkString("\n\t", "\n\t", "")) + val loader = ClasspathUtilities.toLoader(existing.map(_.toFile())) + Class.forName(className, false, loader) + } def dependencies(base: File) = if( ( base / "stm").exists ) ("org.scala-tools" % "scala-stm_2.8.2" % "0.6") :: Nil diff --git a/sbt-app/src/sbt-test/dependency-management/force-update-period/test b/sbt-app/src/sbt-test/dependency-management/force-update-period/pending similarity index 100% rename from sbt-app/src/sbt-test/dependency-management/force-update-period/test rename to sbt-app/src/sbt-test/dependency-management/force-update-period/pending diff --git a/sbt-app/src/sbt-test/dependency-management/force/build.sbt b/sbt-app/src/sbt-test/dependency-management/force/build.sbt index 363063a7fa..7af3315f7a 100644 --- a/sbt-app/src/sbt-test/dependency-management/force/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/force/build.sbt @@ -19,7 +19,7 @@ def libraryDeps(base: File) = { def check(ver: String) = (Compile / dependencyClasspath) map { jars => val log4j = jars map (_.data) collect { - case f if f.getName contains "log4j-" => f.getName + case f if f.name contains "log4j-" => f.name } if (log4j.size != 1 || !log4j.head.contains(ver)) sys.error("Did not download the correct jar.") diff --git a/sbt-app/src/sbt-test/dependency-management/ivy-settings-c/build.sbt b/sbt-app/src/sbt-test/dependency-management/ivy-settings-c/build.sbt index c93bab708e..293d3fa640 100644 --- a/sbt-app/src/sbt-test/dependency-management/ivy-settings-c/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/ivy-settings-c/build.sbt @@ -3,7 +3,11 @@ ThisBuild / useCoursier := false lazy val commonSettings = Seq( autoScalaLibrary := false, scalaModuleInfo := None, - (Compile / unmanagedJars) ++= (scalaInstance map (_.allJars.toSeq)).value, + (Compile / unmanagedJars) ++= { + val converter = fileConverter.value + val xs = scalaInstance.value.allJars.toSeq + xs.map(_.toPath).map(x => converter.toVirtualFile(x): HashedVirtualFileRef) + }, (packageSrc / publishArtifact) := false, (packageDoc / publishArtifact) := false, publishMavenStyle := false diff --git a/sbt-app/src/sbt-test/dependency-management/make-pom-type/build.sbt b/sbt-app/src/sbt-test/dependency-management/make-pom-type/build.sbt index 2de1a2dd44..f216d47d81 100644 --- a/sbt-app/src/sbt-test/dependency-management/make-pom-type/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/make-pom-type/build.sbt @@ -32,8 +32,9 @@ lazy val expectedInter = def checkTask(expectedDep: xml.Elem) = TaskKey[Unit]("checkPom") := { - val file = makePom.value - val pom = xml.XML.loadFile(file) + val vf = makePom.value + val converter = fileConverter.value + val pom = xml.XML.loadFile(converter.toPath(vf).toFile) val actual = pom \\ "dependencies" val expected = {expectedDep} diff --git a/sbt-app/src/sbt-test/dependency-management/make-pom/build.sbt b/sbt-app/src/sbt-test/dependency-management/make-pom/build.sbt index 82c87dbea1..23e38d5a67 100644 --- a/sbt-app/src/sbt-test/dependency-management/make-pom/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/make-pom/build.sbt @@ -1,7 +1,11 @@ import scala.xml._ lazy val root = (project in file(".")) settings ( - readPom := (makePom map XML.loadFile).value, + readPom := { + val vf = makePom.value + val converter = fileConverter.value + XML.loadFile(converter.toPath(vf).toFile) + }, TaskKey[Unit]("checkPom") := checkPom.value, TaskKey[Unit]("checkExtra") := checkExtra.value, TaskKey[Unit]("checkVersionPlusMapping") := checkVersionPlusMapping.value, diff --git a/sbt-app/src/sbt-test/dependency-management/module-name/build.sbt b/sbt-app/src/sbt-test/dependency-management/module-name/build.sbt index 09e992ccfd..edbd9b91e5 100644 --- a/sbt-app/src/sbt-test/dependency-management/module-name/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/module-name/build.sbt @@ -5,7 +5,9 @@ moduleName := "asdf" crossPaths := false TaskKey[Unit]("checkName") := Def task { - val path = (Compile / packageBin).value.getAbsolutePath + val converter = fileConverter.value + val vf = (Compile / packageBin).value + val path = converter.toPath(vf).toAbsolutePath.toString val module = moduleName.value val n = name.value assert(path contains module, s"Path $path did not contain module name $module") diff --git a/sbt-app/src/sbt-test/dependency-management/multiple-classifiers/build.sbt b/sbt-app/src/sbt-test/dependency-management/multiple-classifiers/build.sbt index eeacc06764..9d9b2b8d3d 100644 --- a/sbt-app/src/sbt-test/dependency-management/multiple-classifiers/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/multiple-classifiers/build.sbt @@ -1,30 +1,31 @@ libraryDependencies ++= Seq("natives-windows", "natives-linux", "natives-osx") map ( c => - "org.lwjgl.lwjgl" % "lwjgl-platform" % "2.8.2" classifier c + "org.lwjgl.lwjgl" % "lwjgl-platform" % "2.8.2" classifier c ) autoScalaLibrary := false TaskKey[Unit]("check") := ((Compile / dependencyClasspath) map { cp => - assert(cp.size == 3, "Expected 3 jars, got: " + cp.files.mkString("(", ", ", ")")) + assert(cp.size == 3, "Expected 3 jars, got: " + cp.mkString("(", ", ", ")")) }).value TaskKey[Unit]("checkPom") := { - val file = makePom.value - val pom = xml.XML.loadFile(file) - val actual = pom \\ "dependencies" - def depSection(classifier: String) = - - org.lwjgl.lwjgl - lwjgl-platform - 2.8.2 - {classifier} - - val sections = + val vf = makePom.value + val converter = fileConverter.value + val pom = xml.XML.loadFile(converter.toPath(vf).toFile) + val actual = pom \\ "dependencies" + def depSection(classifier: String) = + + org.lwjgl.lwjgl + lwjgl-platform + 2.8.2 + {classifier} + + val sections = {depSection("natives-windows") ++ depSection("natives-linux") ++ depSection("natives-osx")} - def dropTopElem(s:String): String = s.split("""\n""").drop(1).dropRight(1).mkString("\n") - val pp = new xml.PrettyPrinter(Int.MaxValue, 0) - val expectedString = dropTopElem(pp.formatNodes(sections)) - val actualString = dropTopElem(pp.formatNodes(actual)) - assert(expectedString == actualString, "Expected dependencies section:\n" + expectedString + "\n\nActual:\n" + actualString) + def dropTopElem(s:String): String = s.split("""\n""").drop(1).dropRight(1).mkString("\n") + val pp = new xml.PrettyPrinter(Int.MaxValue, 0) + val expectedString = dropTopElem(pp.formatNodes(sections)) + val actualString = dropTopElem(pp.formatNodes(actual)) + assert(expectedString == actualString, "Expected dependencies section:\n" + expectedString + "\n\nActual:\n" + actualString) } diff --git a/sbt-app/src/sbt-test/dependency-management/multiple-classifiers/changes/non-mergeable.sbt b/sbt-app/src/sbt-test/dependency-management/multiple-classifiers/changes/non-mergeable.sbt index 823ae5825b..dc2018bca8 100644 --- a/sbt-app/src/sbt-test/dependency-management/multiple-classifiers/changes/non-mergeable.sbt +++ b/sbt-app/src/sbt-test/dependency-management/multiple-classifiers/changes/non-mergeable.sbt @@ -8,8 +8,8 @@ autoScalaLibrary := false TaskKey[Unit]("check") := { val cp = (Compile / externalDependencyClasspath).value val tcp = (Test / externalDependencyClasspath).value - assert(cp.size == 2, "Expected 2 jars on compile classpath, got: " + cp.files.mkString("(", ", ", ")")) + assert(cp.size == 2, "Expected 2 jars on compile classpath, got: " + cp.mkString("(", ", ", ")")) // this should really be 1 because of intransitive(), but Ivy doesn't handle this. // So, this test can only check that the assertion reported in #582 isn't triggered. - assert(tcp.size == 2, "Expected 2 jar on test classpath, got: " + tcp.files.mkString("(", ", ", ")")) + assert(tcp.size == 2, "Expected 2 jar on test classpath, got: " + tcp.mkString("(", ", ", ")")) } diff --git a/sbt-app/src/sbt-test/dependency-management/no-file-fails-publish/build.sbt b/sbt-app/src/sbt-test/dependency-management/no-file-fails-publish/build.sbt index 2330bcdff8..c1fe3d52a2 100644 --- a/sbt-app/src/sbt-test/dependency-management/no-file-fails-publish/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/no-file-fails-publish/build.sbt @@ -1,13 +1,13 @@ ThisBuild / csrCacheDirectory := (ThisBuild / baseDirectory).value / "coursier-cache" ivyPaths := IvyPaths(baseDirectory.value.toString, Some(((ThisBuild / baseDirectory).value / "ivy" / "cache").toString)) - organization := "org.example" - name := "publish-missing-test" - autoScalaLibrary := false - addArtifact( - name { n => Artifact(n, "txt", "txt") }, - baseDirectory map { _ / "topublish.txt" } + name { n => Artifact(n, "txt", "txt") }, + Def.task { + val base = baseDirectory.value + val converter = fileConverter.value + converter.toVirtualFile((base / "topublish.txt").toPath) + }, ) diff --git a/sbt-app/src/sbt-test/dependency-management/override2/build.sbt b/sbt-app/src/sbt-test/dependency-management/override2/build.sbt index 4a4cee7c68..d4f465bf83 100644 --- a/sbt-app/src/sbt-test/dependency-management/override2/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/override2/build.sbt @@ -2,11 +2,11 @@ lazy val check = taskKey[Unit]("Runs the check") lazy val root = (project in file(".")) .settings( - autoScalaLibrary := false, + autoScalaLibrary := false, libraryDependencies += "org.webjars.npm" % "is-odd" % "2.0.0", dependencyOverrides += "org.webjars.npm" % "is-number" % "5.0.0", check := { - val cp = (Compile / externalDependencyClasspath).value.map {_.data.getName}.sorted + val cp = (Compile / externalDependencyClasspath).value.map {_.data.name}.sorted if (!(cp contains "is-number-5.0.0.jar")) { sys.error("is-number-5.0.0 not found when it should be included: " + cp.toString) } diff --git a/sbt-app/src/sbt-test/dependency-management/pom-classpaths/build.sbt b/sbt-app/src/sbt-test/dependency-management/pom-classpaths/build.sbt deleted file mode 100644 index 723eba908f..0000000000 --- a/sbt-app/src/sbt-test/dependency-management/pom-classpaths/build.sbt +++ /dev/null @@ -1,35 +0,0 @@ -ThisBuild / useCoursier := false - -import complete._ -import complete.DefaultParsers._ - -lazy val root = (project in file(".")). - settings( - externalPom(), - scalaVersion := "2.9.0-1", - check := checkTask.evaluated, - (Provided / managedClasspath) := Classpaths.managedJars(Provided, classpathTypes.value, update.value) - ) - -def checkTask = Def.inputTask { - val result = parser.parsed - val (conf, names) = result - println("Checking: " + conf.name) - checkClasspath(conf match { - case Provided => (Provided / managedClasspath).value - case Compile => (Compile / fullClasspath).value - case Test => (Test / fullClasspath).value - case Runtime => (Runtime / fullClasspath).value - }, names.toSet) -} - -lazy val check = InputKey[Unit]("check") -def parser: Parser[(Configuration,Seq[String])] = (Space ~> token(cp(Compile) | cp(Runtime) | cp(Provided) | cp(Test))) ~ spaceDelimited("") -def cp(c: Configuration): Parser[Configuration] = c.name ^^^ c -def checkClasspath(cp: Seq[Attributed[File]], names: Set[String]) = { - val fs = cp.files filter { _.getName endsWith ".jar" } - val intersect = fs filter { f => names exists { f.getName startsWith _ } } - assert(intersect == fs, "Expected:" + seqStr(names.toSeq) + "Got: " + seqStr(fs)) - () -} -def seqStr(s: Seq[_]) = s.mkString("\n\t", "\n\t", "\n") diff --git a/sbt-app/src/sbt-test/dependency-management/pom-classpaths/pom.xml b/sbt-app/src/sbt-test/dependency-management/pom-classpaths/pom.xml deleted file mode 100644 index 20162df7ee..0000000000 --- a/sbt-app/src/sbt-test/dependency-management/pom-classpaths/pom.xml +++ /dev/null @@ -1,27 +0,0 @@ - - 4.0.0 - org.example - sbt-pom - 1.0-SNAPSHOT - - - org.scalatest - scalatest_2.9.0 - 1.6.1 - test - - - org.scala-lang - scala-library - 2.9.0-1 - compile - - - javax.servlet - servlet-api - 2.5 - provided - - - diff --git a/sbt-app/src/sbt-test/dependency-management/pom-classpaths/test b/sbt-app/src/sbt-test/dependency-management/pom-classpaths/test deleted file mode 100644 index f1d2f562de..0000000000 --- a/sbt-app/src/sbt-test/dependency-management/pom-classpaths/test +++ /dev/null @@ -1,3 +0,0 @@ -> check test scalatest scala-library servlet-api -> check runtime scala-library -> check compile scala-library servlet-api \ No newline at end of file diff --git a/sbt-app/src/sbt-test/dependency-management/pom-packaging/build.sbt b/sbt-app/src/sbt-test/dependency-management/pom-packaging/build.sbt index 8f19e3462e..18d2b74d38 100644 --- a/sbt-app/src/sbt-test/dependency-management/pom-packaging/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/pom-packaging/build.sbt @@ -1,21 +1,18 @@ val root = project in file(".") - val subJar = project in file("subJar") - def warArtifact = (Compile / packageBin / artifact) ~= (_ withType "war" withExtension "war") val subWar = project in file("subWar") settings warArtifact - val subParent = project in file("subParent") settings ((Compile / publishArtifact) := false) val checkPom = taskKey[Unit]("") (ThisBuild / checkPom) := { - checkPackaging((subJar / makePom).value, "jar") - checkPackaging((subWar / makePom).value, "war") - checkPackaging((subParent / makePom).value, "pom") + checkPackaging((subJar / makePom).value, "jar", fileConverter.value) + checkPackaging((subWar / makePom).value, "war", fileConverter.value) + checkPackaging((subParent / makePom).value, "pom", fileConverter.value) } -def checkPackaging(pom: File, expected: String) = { - val packaging = (xml.XML.loadFile(pom) \\ "packaging").text +def checkPackaging(vf: xsbti.HashedVirtualFileRef, expected: String, converter: xsbti.FileConverter) = { + val packaging = (xml.XML.loadFile(converter.toPath(vf).toFile) \\ "packaging").text if (packaging != expected) - sys error s"Incorrect packaging for '$pom'. Expected '$expected', but got '$packaging'" + sys error s"Incorrect packaging for '$vf'. Expected '$expected', but got '$packaging'" } diff --git a/sbt-app/src/sbt-test/dependency-management/pom-scope/build.sbt b/sbt-app/src/sbt-test/dependency-management/pom-scope/build.sbt index a1df43ecbf..310258a925 100644 --- a/sbt-app/src/sbt-test/dependency-management/pom-scope/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/pom-scope/build.sbt @@ -20,7 +20,10 @@ lazy val root = (project in file(".")). ) ) -def checkPom = makePom map { pom => +val checkPom = Def.task { + val vf = makePom.value + val converter = fileConverter.value + val pom = converter.toPath(vf).toFile val expected = Seq( ("a", None, false, None), ("b", Some("runtime"), true, None), diff --git a/sbt-app/src/sbt-test/dependency-management/pom-type/build.sbt b/sbt-app/src/sbt-test/dependency-management/pom-type/build.sbt index 5c03c5e613..2f327c51a4 100644 --- a/sbt-app/src/sbt-test/dependency-management/pom-type/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/pom-type/build.sbt @@ -6,8 +6,9 @@ lazy val root = (project in file(".")). libraryDependencies += { ("org.scala-tools.sbinary" %% "sbinary" % "0.4.1").withSources().withJavadoc() }, libraryDependencies += { ("org.scala-sbt" % "io" % "0.13.8").intransitive() }, checkPom := { + val converter = fileConverter.value val pomFile = makePom.value - val pom = xml.XML.loadFile(pomFile) + val pom = xml.XML.loadFile(converter.toPath(pomFile).toFile) val tpe = pom \\ "type" if (tpe.nonEmpty) { sys.error("Expected no sections, got: " + tpe + " in \n\n" + pom) diff --git a/sbt-app/src/sbt-test/dependency-management/provided/build.sbt b/sbt-app/src/sbt-test/dependency-management/provided/build.sbt index bc3e7118f5..e8d926fabc 100644 --- a/sbt-app/src/sbt-test/dependency-management/provided/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/provided/build.sbt @@ -8,7 +8,7 @@ lazy val root = (project in file(".")). provided := (baseDirectory.value / "useProvided").exists, configuration := (if (provided.value) Provided else Compile), libraryDependencies += "javax.servlet" % "servlet-api" % "2.5" % configuration.value.name, - Provided / managedClasspath := Classpaths.managedJars(Provided, classpathTypes.value, update.value), + Provided / managedClasspath := Classpaths.managedJars(Provided, classpathTypes.value, update.value, fileConverter.value), check := { val result = ( Space ~> token(Compile.name.id | Runtime.name | Provided.name | Test.name) ~ token(Space ~> Bool) @@ -21,7 +21,8 @@ lazy val root = (project in file(".")). case Test.name => (Test / fullClasspath).value case _ => sys.error(s"Invalid config: $conf") } - checkServletAPI(cp.files, expected, conf) + given FileConverter = fileConverter.value + checkServletAPI(cp.files.map(_.toFile()), expected, conf) } ) diff --git a/sbt-app/src/sbt-test/dependency-management/scala3-auto-scala-library/build.sbt b/sbt-app/src/sbt-test/dependency-management/scala3-auto-scala-library/build.sbt index 9478d98dd6..365c5e690d 100644 --- a/sbt-app/src/sbt-test/dependency-management/scala3-auto-scala-library/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/scala3-auto-scala-library/build.sbt @@ -6,7 +6,7 @@ val checkScalaLibrary = TaskKey[Unit]("checkScalaLibrary") checkScalaLibrary := { val scalaLibsJars = (Compile / managedClasspath).value - .map(_.data.getName) + .map(_.data.name) .filter(name => name.startsWith("scala-library") || name.startsWith("scala3-library")) .sorted val expectedScalaLibsJars = Seq( diff --git a/sbt-app/src/sbt-test/dependency-management/transitive-excludes/build.sbt b/sbt-app/src/sbt-test/dependency-management/transitive-excludes/build.sbt index 5583686d4d..766a4efe91 100644 --- a/sbt-app/src/sbt-test/dependency-management/transitive-excludes/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/transitive-excludes/build.sbt @@ -9,9 +9,9 @@ libraryDependencies += "exclude.test" % "app" % "1.0.0" val checkDependencies = taskKey[Unit]("Checks that dependencies are correct.") checkDependencies := { - val hasBadJar = (Compile / fullClasspath).value.exists { jar => jar.data.getName contains "bottom-1.0.0.jar"} - val errorJarString = (Compile / fullClasspath).value.map(_.data.getName).mkString(" * ", "\n * ", "") - val hasBadMiddleJar = (Compile / fullClasspath).value.exists { jar => jar.data.getName contains "middle-1.0.0.jar"} + val hasBadJar = (Compile / fullClasspath).value.exists { jar => jar.data.name contains "bottom-1.0.0.jar"} + val errorJarString = (Compile / fullClasspath).value.map(_.data.name).mkString(" * ", "\n * ", "") + val hasBadMiddleJar = (Compile / fullClasspath).value.exists { jar => jar.data.name contains "middle-1.0.0.jar"} assert(!hasBadMiddleJar, s"Failed to exclude excluded dependency on classpath!\nFound:\n$errorJarString") assert(!hasBadJar, s"Failed to exclude transitive excluded dependency on classpath!\nFound:\n$errorJarString") val modules = diff --git a/sbt-app/src/sbt-test/dependency-management/update-sbt-classifiers/test b/sbt-app/src/sbt-test/dependency-management/update-sbt-classifiers/pending similarity index 100% rename from sbt-app/src/sbt-test/dependency-management/update-sbt-classifiers/test rename to sbt-app/src/sbt-test/dependency-management/update-sbt-classifiers/pending diff --git a/sbt-app/src/sbt-test/dependency-management/url/build.sbt b/sbt-app/src/sbt-test/dependency-management/url/build.sbt index f70617597a..7f497aa555 100644 --- a/sbt-app/src/sbt-test/dependency-management/url/build.sbt +++ b/sbt-app/src/sbt-test/dependency-management/url/build.sbt @@ -15,9 +15,11 @@ lazy val root = (project in file(".")). ) def checkClasspath(conf: Configuration) = - (conf / fullClasspath) map { cp => + import sbt.TupleSyntax.* + (conf / fullClasspath, fileConverter.toTaskable) mapN { (cp, c) => + given FileConverter = c try { - val loader = ClasspathUtilities.toLoader(cp.files) + val loader = ClasspathUtilities.toLoader(cp.files.map(_.toFile())) Class.forName("org.jsoup.Jsoup", false, loader) () } diff --git a/sbt-app/src/sbt-test/run/classpath/build.sbt b/sbt-app/src/sbt-test/run/classpath/build.sbt index acdd814188..219847e8cc 100644 --- a/sbt-app/src/sbt-test/run/classpath/build.sbt +++ b/sbt-app/src/sbt-test/run/classpath/build.sbt @@ -1 +1,4 @@ -(Runtime / externalDependencyClasspath) += file("conf") \ No newline at end of file +(Runtime / externalDependencyClasspath) += { + val converter = fileConverter.value + converter.toVirtualFile(file("conf").toPath): HashedVirtualFileRef +} \ No newline at end of file diff --git a/sbt-app/src/sbt-test/run/concurrent/build.sbt b/sbt-app/src/sbt-test/run/concurrent/build.sbt index 12ec298a8f..4578d405fc 100644 --- a/sbt-app/src/sbt-test/run/concurrent/build.sbt +++ b/sbt-app/src/sbt-test/run/concurrent/build.sbt @@ -7,6 +7,7 @@ def runTestTask(pre: Def.Initialize[Task[Unit]]) = val cp = (Compile / fullClasspath).value val main = (Compile / mainClass).value getOrElse sys.error("No main class found") val args = baseDirectory.value.getAbsolutePath :: Nil + given FileConverter = fileConverter.value r.run(main, cp.files, args, streams.value.log).get } diff --git a/sbt-app/src/sbt-test/source-dependencies/pipelining-java/test b/sbt-app/src/sbt-test/source-dependencies/pipelining-java/disabled similarity index 100% rename from sbt-app/src/sbt-test/source-dependencies/pipelining-java/test rename to sbt-app/src/sbt-test/source-dependencies/pipelining-java/disabled diff --git a/sbt-app/src/sbt-test/source-dependencies/pipelining/test b/sbt-app/src/sbt-test/source-dependencies/pipelining/disabled similarity index 100% rename from sbt-app/src/sbt-test/source-dependencies/pipelining/test rename to sbt-app/src/sbt-test/source-dependencies/pipelining/disabled diff --git a/sbt-app/src/sbt-test/source-dependencies/replace-test-a/build.sbt b/sbt-app/src/sbt-test/source-dependencies/replace-test-a/build.sbt index 35547df68e..dc343c3239 100644 --- a/sbt-app/src/sbt-test/source-dependencies/replace-test-a/build.sbt +++ b/sbt-app/src/sbt-test/source-dependencies/replace-test-a/build.sbt @@ -1,4 +1,4 @@ -import java.net.URLClassLoader +import sbt.internal.inc.classpath.ClasspathUtilities lazy val root = (project in file(".")). settings( @@ -7,8 +7,11 @@ lazy val root = (project in file(".")). ) def checkTask(className: String) = - (Configurations.Runtime / fullClasspath) map { runClasspath => - val cp = runClasspath.map(_.data.toURI.toURL).toArray - Class.forName(className, false, new URLClassLoader(cp)) + import sbt.TupleSyntax.* + (Configurations.Runtime / fullClasspath, fileConverter) mapN { (runClasspath, c) => + given FileConverter = c + val cp = runClasspath.files + val loader = ClasspathUtilities.toLoader(cp.map(_.toFile())) + Class.forName(className, false, loader) () }