diff --git a/.travis.yml b/.travis.yml index d37eb6afa..5f721d033 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,6 +17,7 @@ env: - SBT_CMD="scripted dependency-management/*2of4" - SBT_CMD="scripted dependency-management/*3of4" - SBT_CMD="scripted dependency-management/*4of4" + - SBT_CMD="scripted plugins/*" - SBT_CMD="scripted package/* reporter/* run/* project-load/*" - SBT_CMD="scripted project/*1of2" - SBT_CMD="scripted project/*2of2" diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index 52eff84cc..7464c2f0f 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -355,6 +355,7 @@ object Keys { val useCoursier = settingKey[Boolean]("Use Coursier for dependency resolution.").withRank(BSetting) val csrCachePath = settingKey[File]("Coursier cache path").withRank(CSetting) + val csrMavenProfiles = settingKey[Set[String]]("").withRank(CSetting) private[sbt] val csrConfiguration = taskKey[CoursierConfiguration]("General dependency management (Coursier) settings, such as the resolvers and options to use.").withRank(DTask) private[sbt] val csrProject = taskKey[coursier.core.Project]("") private[sbt] val csrResolvers = taskKey[Seq[Resolver]]("") @@ -362,7 +363,6 @@ object Keys { private[sbt] val csrSbtResolvers = taskKey[Seq[Resolver]]("Resolvers used for sbt artifacts.") private[sbt] val csrInterProjectDependencies = taskKey[Seq[coursier.core.Project]]("Projects the current project depends on, possibly transitively") private[sbt] val csrFallbackDependencies = taskKey[Seq[FallbackDependency]]("") - private[sbt] val csrMavenProfiles = settingKey[Set[String]]("") private[sbt] val csrLogger = taskKey[Option[CacheLogger]]("") private[sbt] val csrExtraCredentials = taskKey[Seq[coursier.credentials.Credentials]]("") private[sbt] val csrPublications = taskKey[Seq[(coursier.core.Configuration, coursier.core.Publication)]]("") diff --git a/sbt/src/sbt-test/dependency-management/aar-packaging/build.sbt b/sbt/src/sbt-test/dependency-management/aar-packaging/build.sbt new file mode 100644 index 000000000..97b5c2cff --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/aar-packaging/build.sbt @@ -0,0 +1,6 @@ +scalaVersion := "2.11.8" + +libraryDependencies += ("com.rengwuxian.materialedittext" % "library" % "2.1.4") + .exclude("com.android.support", "support-v4") + .exclude("com.android.support", "support-annotations") + .exclude("com.android.support", "appcompat-v7") diff --git a/sbt/src/sbt-test/dependency-management/aar-packaging/src/main/scala/Main.scala b/sbt/src/sbt-test/dependency-management/aar-packaging/src/main/scala/Main.scala new file mode 100644 index 000000000..61295349d --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/aar-packaging/src/main/scala/Main.scala @@ -0,0 +1,6 @@ +import java.io.File +import java.nio.file.Files + +object Main extends App { + Files.write(new File("output").toPath, "OK".getBytes("UTF-8")) +} diff --git a/sbt/src/sbt-test/dependency-management/aar-packaging/test b/sbt/src/sbt-test/dependency-management/aar-packaging/test new file mode 100644 index 000000000..2182f57b0 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/aar-packaging/test @@ -0,0 +1,3 @@ +$ delete output +> run +$ exists output diff --git a/sbt/src/sbt-test/dependency-management/auto-scala-library/build.sbt b/sbt/src/sbt-test/dependency-management/auto-scala-library/build.sbt new file mode 100644 index 000000000..20969e7e5 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/auto-scala-library/build.sbt @@ -0,0 +1,20 @@ +autoScalaLibrary := false +libraryDependencies += "com.chuusai" % "shapeless_2.12" % "2.3.2" + +val checkScalaLibrary = TaskKey[Unit]("checkScalaLibrary") + +checkScalaLibrary := { + val scalaLibsJars = managedClasspath + .in(Compile) + .value + .map(_.data.getName) + .filter(_.startsWith("scala-library")) + .sorted + val expectedScalaLibsJars = Seq( + "scala-library-2.12.0.jar" + ) + assert( + scalaLibsJars == expectedScalaLibsJars, + s"$scalaLibsJars != $expectedScalaLibsJars" + ) +} diff --git a/sbt/src/sbt-test/dependency-management/auto-scala-library/test b/sbt/src/sbt-test/dependency-management/auto-scala-library/test new file mode 100644 index 000000000..f56f5a75e --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/auto-scala-library/test @@ -0,0 +1 @@ +> checkScalaLibrary diff --git a/sbt/src/sbt-test/dependency-management/classifier2/build.sbt b/sbt/src/sbt-test/dependency-management/classifier2/build.sbt new file mode 100644 index 000000000..21f304a4b --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/classifier2/build.sbt @@ -0,0 +1,2 @@ +scalaVersion := "2.11.8" +libraryDependencies += "org.jclouds.api" % "nova" % "1.5.9" classifier "tests" diff --git a/sbt/src/sbt-test/dependency-management/classifier2/src/main/scala/Main.scala b/sbt/src/sbt-test/dependency-management/classifier2/src/main/scala/Main.scala new file mode 100644 index 000000000..b1a40797d --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/classifier2/src/main/scala/Main.scala @@ -0,0 +1,18 @@ +import java.io.File +import java.nio.file.Files + +import scala.util.Try + +object Main extends App { + + def classFound(clsName: String) = Try( + Thread.currentThread() + .getContextClassLoader() + .loadClass(clsName) + ).toOption.nonEmpty + + val name = "org.jclouds.openstack.nova.functions.ParseServerFromJsonResponseTest" + val classifierTest = classFound(name) + + assert(classifierTest, s"Couldn't find $name") +} diff --git a/sbt/src/sbt-test/dependency-management/classifier2/test b/sbt/src/sbt-test/dependency-management/classifier2/test new file mode 100644 index 000000000..62ea636c1 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/classifier2/test @@ -0,0 +1 @@ +> run diff --git a/sbt/src/sbt-test/dependency-management/exclude-dependencies2/build.sbt b/sbt/src/sbt-test/dependency-management/exclude-dependencies2/build.sbt new file mode 100644 index 000000000..627874b74 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/exclude-dependencies2/build.sbt @@ -0,0 +1,11 @@ + +scalaVersion := "2.11.8" + +organization := "io.get-coursier.test" +name := "sbt-coursier-exclude-dependencies" +version := "0.1.0-SNAPSHOT" + +libraryDependencies += "com.github.alexarchambault" %% "argonaut-shapeless_6.1" % "1.0.0-RC1" + +excludeDependencies += sbt.ExclusionRule("com.chuusai", "shapeless_2.11") +excludeDependencies += "io.argonaut" %% "argonaut" diff --git a/sbt/src/sbt-test/dependency-management/exclude-dependencies2/coursier b/sbt/src/sbt-test/dependency-management/exclude-dependencies2/coursier new file mode 100755 index 000000000..6cada6f8b Binary files /dev/null and b/sbt/src/sbt-test/dependency-management/exclude-dependencies2/coursier differ diff --git a/sbt/src/sbt-test/dependency-management/exclude-dependencies2/src/main/scala/Main.scala b/sbt/src/sbt-test/dependency-management/exclude-dependencies2/src/main/scala/Main.scala new file mode 100644 index 000000000..1bc056610 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/exclude-dependencies2/src/main/scala/Main.scala @@ -0,0 +1,32 @@ +import java.io.File +import java.nio.file.Files + +import scala.util.Try + +object Main extends App { + + def classFound(clsName: String) = Try( + Thread.currentThread() + .getContextClassLoader() + .loadClass(clsName) + ).toOption.nonEmpty + + val shapelessFound = classFound("shapeless.HList") + val argonautFound = classFound("argonaut.Json") + val argonautShapelessFound = classFound("argonaut.derive.MkEncodeJson") + + assert( + argonautShapelessFound, + "Expected to find class from argonaut-shapeless" + ) + assert( + !shapelessFound, + "Expected not to find classes from shapeless" + ) + assert( + !argonautFound, + "Expected not to find classes from argonaut" + ) + + Files.write(new File("output").toPath, "OK".getBytes("UTF-8")) +} diff --git a/sbt/src/sbt-test/dependency-management/exclude-dependencies2/test b/sbt/src/sbt-test/dependency-management/exclude-dependencies2/test new file mode 100644 index 000000000..ad685c023 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/exclude-dependencies2/test @@ -0,0 +1,5 @@ +$ delete output +> run +$ exists output +> publishLocal +$ exec java -jar coursier launch io.get-coursier.test:sbt-coursier-exclude-dependencies_2.11:0.1.0-SNAPSHOT diff --git a/sbt/src/sbt-test/dependency-management/fallback-dependencies-inter-project/a/src/main/scala/A.scala b/sbt/src/sbt-test/dependency-management/fallback-dependencies-inter-project/a/src/main/scala/A.scala new file mode 100644 index 000000000..954405774 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/fallback-dependencies-inter-project/a/src/main/scala/A.scala @@ -0,0 +1,6 @@ + +case class A(msg: String) + +object A { + def default = A("OK") +} diff --git a/sbt/src/sbt-test/dependency-management/fallback-dependencies-inter-project/b/src/main/scala/Main.scala b/sbt/src/sbt-test/dependency-management/fallback-dependencies-inter-project/b/src/main/scala/Main.scala new file mode 100644 index 000000000..59bb6d372 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/fallback-dependencies-inter-project/b/src/main/scala/Main.scala @@ -0,0 +1,9 @@ +import java.io.File +import java.nio.file.Files + +object Main extends App { + + val msg = shapeless.Generic[A].to(A.default).head + + Files.write(new File("output").toPath, msg.getBytes("UTF-8")) +} diff --git a/sbt/src/sbt-test/dependency-management/fallback-dependencies-inter-project/build.sbt b/sbt/src/sbt-test/dependency-management/fallback-dependencies-inter-project/build.sbt new file mode 100644 index 000000000..93f7aa347 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/fallback-dependencies-inter-project/build.sbt @@ -0,0 +1,20 @@ + +lazy val a = project + .settings(sharedSettings) + .settings( + libraryDependencies += "com.chuusai" %% "shapeless" % "2.3.234" from "https://oss.sonatype.org/content/repositories/releases/com/chuusai/shapeless_2.11/2.3.1/shapeless_2.11-2.3.1.jar" + ) + +lazy val b = project + .dependsOn(a) + .settings(sharedSettings) + +lazy val root = project + .in(file(".")) + .aggregate(a, b) + .settings(sharedSettings) + + +lazy val sharedSettings = Seq( + scalaVersion := "2.11.8" +) diff --git a/sbt/src/sbt-test/dependency-management/fallback-dependencies-inter-project/test b/sbt/src/sbt-test/dependency-management/fallback-dependencies-inter-project/test new file mode 100644 index 000000000..ea53e1abb --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/fallback-dependencies-inter-project/test @@ -0,0 +1,3 @@ +$ delete output +> b/run +$ exists output diff --git a/sbt/src/sbt-test/dependency-management/global-plugins/build.sbt b/sbt/src/sbt-test/dependency-management/global-plugins/build.sbt new file mode 100644 index 000000000..5642f168f --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/global-plugins/build.sbt @@ -0,0 +1 @@ +scalaVersion := "2.12.8" diff --git a/sbt/src/sbt-test/dependency-management/global-plugins/global/plugins/metals.sbt b/sbt/src/sbt-test/dependency-management/global-plugins/global/plugins/metals.sbt new file mode 100644 index 000000000..8aae08736 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/global-plugins/global/plugins/metals.sbt @@ -0,0 +1,2 @@ +addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.2.5") +addSbtPlugin("org.scalameta" % "sbt-metals" % "0.4.4") diff --git a/sbt/src/sbt-test/dependency-management/global-plugins/test b/sbt/src/sbt-test/dependency-management/global-plugins/test new file mode 100644 index 000000000..67a8b1ff1 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/global-plugins/test @@ -0,0 +1,2 @@ +> metalsEnable +> bloopInstall diff --git a/sbt/src/sbt-test/dependency-management/hadoop-yarn-server-resourcemanager/build.sbt b/sbt/src/sbt-test/dependency-management/hadoop-yarn-server-resourcemanager/build.sbt new file mode 100644 index 000000000..983b4325e --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/hadoop-yarn-server-resourcemanager/build.sbt @@ -0,0 +1,3 @@ +scalaVersion := "2.11.8" + +libraryDependencies += "org.apache.hadoop" % "hadoop-yarn-server-resourcemanager" % "2.7.1" diff --git a/sbt/src/sbt-test/dependency-management/hadoop-yarn-server-resourcemanager/src/main/scala/Main.scala b/sbt/src/sbt-test/dependency-management/hadoop-yarn-server-resourcemanager/src/main/scala/Main.scala new file mode 100644 index 000000000..032874759 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/hadoop-yarn-server-resourcemanager/src/main/scala/Main.scala @@ -0,0 +1,8 @@ +import java.io.File +import java.nio.file.Files + +import org.apache.zookeeper.ZooKeeper + +object Main extends App { + Files.write(new File("output").toPath, classOf[ZooKeeper].getSimpleName.getBytes("UTF-8")) +} diff --git a/sbt/src/sbt-test/dependency-management/hadoop-yarn-server-resourcemanager/test b/sbt/src/sbt-test/dependency-management/hadoop-yarn-server-resourcemanager/test new file mode 100644 index 000000000..2182f57b0 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/hadoop-yarn-server-resourcemanager/test @@ -0,0 +1,3 @@ +$ delete output +> run +$ exists output diff --git a/sbt/src/sbt-test/dependency-management/inter-project-resolvers/a/src/main/scala/A.scala b/sbt/src/sbt-test/dependency-management/inter-project-resolvers/a/src/main/scala/A.scala new file mode 100644 index 000000000..954405774 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/inter-project-resolvers/a/src/main/scala/A.scala @@ -0,0 +1,6 @@ + +case class A(msg: String) + +object A { + def default = A("OK") +} diff --git a/sbt/src/sbt-test/dependency-management/inter-project-resolvers/b/src/main/scala/Main.scala b/sbt/src/sbt-test/dependency-management/inter-project-resolvers/b/src/main/scala/Main.scala new file mode 100644 index 000000000..f2c112187 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/inter-project-resolvers/b/src/main/scala/Main.scala @@ -0,0 +1,14 @@ +import java.io.File +import java.nio.file.Files + +import scalaz.stream._ +import scalaz.concurrent.Task + +object Main extends App { + + val pch = Process.constant((i:Int) => Task.now(())).take(3) + val count = Process.constant(1).toSource.to(pch).runLog.run.size + assert(count == 3) + + Files.write(new File("output").toPath, A.default.msg.getBytes("UTF-8")) +} diff --git a/sbt/src/sbt-test/dependency-management/inter-project-resolvers/build.sbt b/sbt/src/sbt-test/dependency-management/inter-project-resolvers/build.sbt new file mode 100644 index 000000000..d375b4ab6 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/inter-project-resolvers/build.sbt @@ -0,0 +1,24 @@ + +lazy val a = project + .settings(sharedSettings) + .settings( + resolvers += "Scalaz Bintray Repo" at "https://dl.bintray.com/scalaz/releases" + ) + +lazy val b = project + .dependsOn(a) + .settings(sharedSettings) + .settings( + // resolver added in inter-project dependency only - should still be fine + libraryDependencies += "org.scalaz.stream" %% "scalaz-stream" % "0.7.1a" + ) + +lazy val root = project + .in(file(".")) + .aggregate(a, b) + .settings(sharedSettings) + + +lazy val sharedSettings = Seq( + scalaVersion := "2.11.8" +) diff --git a/sbt/src/sbt-test/dependency-management/inter-project-resolvers/test b/sbt/src/sbt-test/dependency-management/inter-project-resolvers/test new file mode 100644 index 000000000..ea53e1abb --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/inter-project-resolvers/test @@ -0,0 +1,3 @@ +$ delete output +> b/run +$ exists output diff --git a/sbt/src/sbt-test/dependency-management/inter-project/a/src/main/scala/A.scala b/sbt/src/sbt-test/dependency-management/inter-project/a/src/main/scala/A.scala new file mode 100644 index 000000000..5308caa95 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/inter-project/a/src/main/scala/A.scala @@ -0,0 +1,6 @@ + +object A { + + def msg = "OK" + +} diff --git a/sbt/src/sbt-test/dependency-management/inter-project/b/src/main/scala/Main.scala b/sbt/src/sbt-test/dependency-management/inter-project/b/src/main/scala/Main.scala new file mode 100644 index 000000000..624039aa5 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/inter-project/b/src/main/scala/Main.scala @@ -0,0 +1,13 @@ +import java.io.File +import java.nio.file.Files + +import argonaut._, Argonaut._, ArgonautShapeless._ + +object Main extends App { + + case class CC(i: Int, s: String) + + val msg = CC(2, A.msg).asJson.spaces2 + + Files.write(new File("output").toPath, msg.getBytes("UTF-8")) +} diff --git a/sbt/src/sbt-test/dependency-management/inter-project/build.sbt b/sbt/src/sbt-test/dependency-management/inter-project/build.sbt new file mode 100644 index 000000000..ca35179d2 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/inter-project/build.sbt @@ -0,0 +1,32 @@ + +lazy val sharedSettings = Seq( + scalaVersion := "2.11.8" +) + +/** Module with the same Maven coordinates as shapeless 2.3.1 */ +lazy val `shapeless-mock` = project + .settings(sharedSettings) + .settings( + organization := "com.chuusai", + name := "shapeless", + version := "2.3.1" + ) + +lazy val a = project + .settings(sharedSettings) + .settings( + organization := "com.pany", + name := "a", + version := "0.0.1" + ) + +/** Transitively depends on the - real - shapeless 2.3.1 */ +lazy val b = project + .dependsOn(a) + .settings(sharedSettings) + .settings( + organization := "com.pany", + name := "b", + version := "0.0.1", + libraryDependencies += "com.github.alexarchambault" %% "argonaut-shapeless_6.2" % "1.2.0-M1" + ) diff --git a/sbt/src/sbt-test/dependency-management/inter-project/test b/sbt/src/sbt-test/dependency-management/inter-project/test new file mode 100644 index 000000000..ea53e1abb --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/inter-project/test @@ -0,0 +1,3 @@ +$ delete output +> b/run +$ exists output diff --git a/sbt/src/sbt-test/dependency-management/no-pom-artifact/build.sbt b/sbt/src/sbt-test/dependency-management/no-pom-artifact/build.sbt new file mode 100644 index 000000000..7465c34d7 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/no-pom-artifact/build.sbt @@ -0,0 +1,30 @@ + +lazy val noPomCheck = TaskKey[Unit]("noPomCheck") + +noPomCheck := { + + val log = streams.value.log + + val configReport = update.value + .configuration(Compile) + .getOrElse { + throw new Exception( + "compile configuration not found in update report" + ) + } + + val artifacts = configReport + .modules + .flatMap(_.artifacts) + .map(_._1) + + val pomArtifacts = artifacts + .filter { a => + a.`type` == "pom" && a.classifier.isEmpty + } + + for (a <- pomArtifacts) + log.error(s"Found POM artifact $a") + + assert(pomArtifacts.isEmpty) +} diff --git a/sbt/src/sbt-test/dependency-management/no-pom-artifact/test b/sbt/src/sbt-test/dependency-management/no-pom-artifact/test new file mode 100644 index 000000000..67b4dc666 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/no-pom-artifact/test @@ -0,0 +1 @@ +> noPomCheck diff --git a/sbt/src/sbt-test/dependency-management/profiles/build.sbt b/sbt/src/sbt-test/dependency-management/profiles/build.sbt new file mode 100644 index 000000000..0dde988c3 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/profiles/build.sbt @@ -0,0 +1,5 @@ +ThisBuild / scalaVersion := "2.11.8" + +Compile / classLoaderLayeringStrategy := ClassLoaderLayeringStrategy.Flat +libraryDependencies += "org.apache.spark" %% "spark-sql" % "1.6.2" +csrMavenProfiles += "hadoop-2.6" diff --git a/sbt/src/sbt-test/dependency-management/profiles/output b/sbt/src/sbt-test/dependency-management/profiles/output new file mode 100644 index 000000000..a0aba9318 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/profiles/output @@ -0,0 +1 @@ +OK \ No newline at end of file diff --git a/sbt/src/sbt-test/dependency-management/profiles/src/main/scala/Main.scala b/sbt/src/sbt-test/dependency-management/profiles/src/main/scala/Main.scala new file mode 100644 index 000000000..9ac86fe34 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/profiles/src/main/scala/Main.scala @@ -0,0 +1,19 @@ +import java.io.File +import java.nio.file.Files + +object Main extends App { + val p = new java.util.Properties + p.load( + Thread.currentThread() + .getContextClassLoader + .getResource("common-version-info.properties") + .openStream() + ) + + val hadoopVersion = p.getProperty("version") + Console.err.println(s"Found hadoop version $hadoopVersion") + + assert(hadoopVersion == "2.6.0") + + Files.write(new File("output").toPath, "OK".getBytes("UTF-8")) +} diff --git a/sbt/src/sbt-test/dependency-management/profiles/test b/sbt/src/sbt-test/dependency-management/profiles/test new file mode 100644 index 000000000..2182f57b0 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/profiles/test @@ -0,0 +1,3 @@ +$ delete output +> run +$ exists output diff --git a/sbt/src/sbt-test/dependency-management/typelevel/build.sbt b/sbt/src/sbt-test/dependency-management/typelevel/build.sbt new file mode 100644 index 000000000..6a6bacd66 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/typelevel/build.sbt @@ -0,0 +1,3 @@ +scalaOrganization := "org.typelevel" +scalaVersion := "2.11.7" +scalacOptions += "-Xexperimental" diff --git a/sbt/src/sbt-test/dependency-management/typelevel/src/main/scala/Main.scala b/sbt/src/sbt-test/dependency-management/typelevel/src/main/scala/Main.scala new file mode 100644 index 000000000..32ca74bee --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/typelevel/src/main/scala/Main.scala @@ -0,0 +1,8 @@ +import java.io.File +import java.nio.file.Files + +object Main extends App { + val n': 2.type = 2 + + Files.write(new File("output").toPath, "OK".getBytes("UTF-8")) +} diff --git a/sbt/src/sbt-test/dependency-management/typelevel/test b/sbt/src/sbt-test/dependency-management/typelevel/test new file mode 100644 index 000000000..2182f57b0 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/typelevel/test @@ -0,0 +1,3 @@ +$ delete output +> run +$ exists output diff --git a/sbt/src/sbt-test/dependency-management/url-no-head/build.sbt b/sbt/src/sbt-test/dependency-management/url-no-head/build.sbt new file mode 100644 index 000000000..bba414888 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/url-no-head/build.sbt @@ -0,0 +1,3 @@ +scalaVersion := "2.11.8" + +libraryDependencies += "ccl.northwestern.edu" % "netlogo" % "5.3.1" % "provided" from s"https://github.com/NetLogo/NetLogo/releases/download/5.3.1/NetLogo.jar" diff --git a/sbt/src/sbt-test/dependency-management/url-no-head/src/main/scala/Main.scala b/sbt/src/sbt-test/dependency-management/url-no-head/src/main/scala/Main.scala new file mode 100644 index 000000000..d75f66eaf --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/url-no-head/src/main/scala/Main.scala @@ -0,0 +1,11 @@ +import java.io.File +import java.nio.file.Files + +object Main extends App { + // Not using directly the NetLogo 5.x lib, which seems to depend on Scala 2.9 + // Can't find a way to check that NetLogo.jar is in the classpath + // These don't work, even with fork := true: + // assert(Thread.currentThread.getContextClassLoader.getResource("org/nlogo/nvm/Task.class") != null) + // Thread.currentThread.getContextClassLoader.getResource("org/nlogo/nvm/Task.class") + Files.write(new File("output").toPath, "OK".getBytes("UTF-8")) +} diff --git a/sbt/src/sbt-test/dependency-management/url-no-head/test b/sbt/src/sbt-test/dependency-management/url-no-head/test new file mode 100644 index 000000000..2182f57b0 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/url-no-head/test @@ -0,0 +1,3 @@ +$ delete output +> run +$ exists output diff --git a/sbt/src/sbt-test/dependency-management/version-interval/build.sbt b/sbt/src/sbt-test/dependency-management/version-interval/build.sbt new file mode 100644 index 000000000..efeaf236e --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/version-interval/build.sbt @@ -0,0 +1,35 @@ + +libraryDependencies += "org.json4s" %% "json4s-native" % "[3.3.0,3.5.0)" + + +lazy val actualVersionCheck = taskKey[Unit]("") + +actualVersionCheck := { + + val log = streams.value.log + + val configReport = update.value + .configuration(Compile) + .getOrElse { + sys.error("compile configuration not found in update report") + } + + val modules = configReport + .modules + .map(_.module) + + assert(modules.nonEmpty) + assert(modules.exists(_.name.startsWith("json4s-native"))) + + val wrongModules = modules.filter { m => + val v = m.revision + v.contains("[") || v.contains("]") || v.contains("(") || v.contains(")") + } + + if (wrongModules.nonEmpty) { + log.error("Found unexpected intervals in revisions") + for (m <- wrongModules) + log.error(s" ${m.organization}:${m.name}:${m.revision}") + sys.error("Found intervals in revisions") + } +} diff --git a/sbt/src/sbt-test/dependency-management/version-interval/test b/sbt/src/sbt-test/dependency-management/version-interval/test new file mode 100644 index 000000000..99803d595 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/version-interval/test @@ -0,0 +1 @@ +> actualVersionCheck diff --git a/sbt/src/sbt-test/plugins/dotty/LICENSE b/sbt/src/sbt-test/plugins/dotty/LICENSE new file mode 100644 index 000000000..728844ee3 --- /dev/null +++ b/sbt/src/sbt-test/plugins/dotty/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) 2015 The dotty-example-project contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/sbt/src/sbt-test/plugins/dotty/README.md b/sbt/src/sbt-test/plugins/dotty/README.md new file mode 100644 index 000000000..e476c5c1d --- /dev/null +++ b/sbt/src/sbt-test/plugins/dotty/README.md @@ -0,0 +1 @@ +Cut-n-pasted from https://github.com/lampepfl/dotty-example-project/tree/a753b14e281bbaa6c69f26298913ad6feba969c7 diff --git a/sbt/src/sbt-test/plugins/dotty/build.sbt b/sbt/src/sbt-test/plugins/dotty/build.sbt new file mode 100644 index 000000000..e38070b5e --- /dev/null +++ b/sbt/src/sbt-test/plugins/dotty/build.sbt @@ -0,0 +1 @@ +scalaVersion := "0.13.0-RC1" diff --git a/sbt/src/sbt-test/plugins/dotty/project/build.properties b/sbt/src/sbt-test/plugins/dotty/project/build.properties new file mode 100644 index 000000000..16dc090c5 --- /dev/null +++ b/sbt/src/sbt-test/plugins/dotty/project/build.properties @@ -0,0 +1,3 @@ +# sbt-coursier scripted tests: required, as we default to sbt 1.0.3, +# but sbt-dotty requires sbt >= 1.2.7 +sbt.version=1.2.7 diff --git a/sbt/src/sbt-test/plugins/dotty/project/plugins.sbt b/sbt/src/sbt-test/plugins/dotty/project/plugins.sbt new file mode 100644 index 000000000..b5de60fc6 --- /dev/null +++ b/sbt/src/sbt-test/plugins/dotty/project/plugins.sbt @@ -0,0 +1 @@ +addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % "0.3.0") diff --git a/sbt/src/sbt-test/plugins/dotty/src/main/scala/Main.scala b/sbt/src/sbt-test/plugins/dotty/src/main/scala/Main.scala new file mode 100644 index 000000000..8a44ae4ef --- /dev/null +++ b/sbt/src/sbt-test/plugins/dotty/src/main/scala/Main.scala @@ -0,0 +1,16 @@ + +object Main { + + def main(args: Array[String]): Unit = { + + runExample("Trait Params")(TraitParams.test) + + } + + private def runExample(name: String)(f: => Unit) = { + println(Console.MAGENTA + s"$name example:" + Console.RESET) + f + println() + } + +} diff --git a/sbt/src/sbt-test/plugins/dotty/src/main/scala/TraitParams.scala b/sbt/src/sbt-test/plugins/dotty/src/main/scala/TraitParams.scala new file mode 100644 index 000000000..5d4409971 --- /dev/null +++ b/sbt/src/sbt-test/plugins/dotty/src/main/scala/TraitParams.scala @@ -0,0 +1,21 @@ +/** + * Trait Parameters: https://dotty.epfl.ch/docs/reference/other-new-features/trait-parameters.html + */ +object TraitParams { + + trait Base(val msg: String) + class A extends Base("Hello") + class B extends Base("Dotty!") + + // Union types only exist in Dotty, so there's no chance that this will accidentally be compiled with Scala 2 + private def printMessages(msgs: (A | B)*) = println(msgs.map(_.msg).mkString(" ")) + + def test: Unit = { + + printMessages(new A, new B) + + // Sanity check the classpath: this won't run if the dotty jar is not present. + val x: Int => Int = z => z + x(1) + } +} diff --git a/sbt/src/sbt-test/plugins/dotty/test b/sbt/src/sbt-test/plugins/dotty/test new file mode 100644 index 000000000..62ea636c1 --- /dev/null +++ b/sbt/src/sbt-test/plugins/dotty/test @@ -0,0 +1 @@ +> run diff --git a/sbt/src/sbt-test/plugins/neo-sbt-scalafmt/build.sbt b/sbt/src/sbt-test/plugins/neo-sbt-scalafmt/build.sbt new file mode 100644 index 000000000..6dcc058c2 --- /dev/null +++ b/sbt/src/sbt-test/plugins/neo-sbt-scalafmt/build.sbt @@ -0,0 +1,2 @@ +scalaVersion := "2.12.2" +enablePlugins(ScalafmtPlugin) diff --git a/sbt/src/sbt-test/plugins/neo-sbt-scalafmt/project/extra.sbt b/sbt/src/sbt-test/plugins/neo-sbt-scalafmt/project/extra.sbt new file mode 100644 index 000000000..4aa3881f4 --- /dev/null +++ b/sbt/src/sbt-test/plugins/neo-sbt-scalafmt/project/extra.sbt @@ -0,0 +1 @@ +addSbtPlugin("com.lucidchart" % "sbt-scalafmt" % "1.15") diff --git a/sbt/src/sbt-test/plugins/neo-sbt-scalafmt/src/main/scala/Main.scala b/sbt/src/sbt-test/plugins/neo-sbt-scalafmt/src/main/scala/Main.scala new file mode 100644 index 000000000..61295349d --- /dev/null +++ b/sbt/src/sbt-test/plugins/neo-sbt-scalafmt/src/main/scala/Main.scala @@ -0,0 +1,6 @@ +import java.io.File +import java.nio.file.Files + +object Main extends App { + Files.write(new File("output").toPath, "OK".getBytes("UTF-8")) +} diff --git a/sbt/src/sbt-test/plugins/neo-sbt-scalafmt/test b/sbt/src/sbt-test/plugins/neo-sbt-scalafmt/test new file mode 100644 index 000000000..97b42a4f4 --- /dev/null +++ b/sbt/src/sbt-test/plugins/neo-sbt-scalafmt/test @@ -0,0 +1 @@ +> scalafmt diff --git a/sbt/src/sbt-test/plugins/sbt-native-packager/build.sbt b/sbt/src/sbt-test/plugins/sbt-native-packager/build.sbt new file mode 100644 index 000000000..4c3343012 --- /dev/null +++ b/sbt/src/sbt-test/plugins/sbt-native-packager/build.sbt @@ -0,0 +1,20 @@ +ThisBuild / scalaVersion := "2.12.8" + +name := "hello" +enablePlugins(JavaAppPackaging) + +lazy val check = taskKey[Unit]("") + +check := { + val cmd = "target/universal/stage/bin/hello" + val cmd0 = + if (sys.props("os.name").toLowerCase(java.util.Locale.ROOT).contains("windows")) + cmd + ".bat" + else + cmd + val b = new ProcessBuilder(cmd0) + b.inheritIO() + val p = b.start() + val retCode = p.waitFor() + assert(retCode == 0, s"Command $cmd returned code $retCode") +} diff --git a/sbt/src/sbt-test/plugins/sbt-native-packager/project/plugins.sbt b/sbt/src/sbt-test/plugins/sbt-native-packager/project/plugins.sbt new file mode 100644 index 000000000..44cfb3f47 --- /dev/null +++ b/sbt/src/sbt-test/plugins/sbt-native-packager/project/plugins.sbt @@ -0,0 +1 @@ +addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.3") diff --git a/sbt/src/sbt-test/plugins/sbt-native-packager/src/main/scala/Main.scala b/sbt/src/sbt-test/plugins/sbt-native-packager/src/main/scala/Main.scala new file mode 100644 index 000000000..61295349d --- /dev/null +++ b/sbt/src/sbt-test/plugins/sbt-native-packager/src/main/scala/Main.scala @@ -0,0 +1,6 @@ +import java.io.File +import java.nio.file.Files + +object Main extends App { + Files.write(new File("output").toPath, "OK".getBytes("UTF-8")) +} diff --git a/sbt/src/sbt-test/plugins/sbt-native-packager/test b/sbt/src/sbt-test/plugins/sbt-native-packager/test new file mode 100644 index 000000000..bb563a74f --- /dev/null +++ b/sbt/src/sbt-test/plugins/sbt-native-packager/test @@ -0,0 +1,5 @@ +$ delete output +> stage +> check +$ exists output +$ delete output diff --git a/sbt/src/sbt-test/plugins/scala-js/build.sbt b/sbt/src/sbt-test/plugins/scala-js/build.sbt new file mode 100644 index 000000000..2c43a4b30 --- /dev/null +++ b/sbt/src/sbt-test/plugins/scala-js/build.sbt @@ -0,0 +1,3 @@ +scalaVersion := "2.12.3" +enablePlugins(ScalaJSPlugin) +libraryDependencies += "org.scala-js" %%% "scalajs-java-time" % "0.2.2" diff --git a/sbt/src/sbt-test/plugins/scala-js/project/extra.sbt b/sbt/src/sbt-test/plugins/scala-js/project/extra.sbt new file mode 100644 index 000000000..4f6de4f49 --- /dev/null +++ b/sbt/src/sbt-test/plugins/scala-js/project/extra.sbt @@ -0,0 +1 @@ +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.19") diff --git a/sbt/src/sbt-test/plugins/scala-js/test b/sbt/src/sbt-test/plugins/scala-js/test new file mode 100644 index 000000000..103bd8d2f --- /dev/null +++ b/sbt/src/sbt-test/plugins/scala-js/test @@ -0,0 +1 @@ +> update diff --git a/sbt/src/sbt-test/plugins/unidoc/build.sbt b/sbt/src/sbt-test/plugins/unidoc/build.sbt new file mode 100644 index 000000000..3aa46422f --- /dev/null +++ b/sbt/src/sbt-test/plugins/unidoc/build.sbt @@ -0,0 +1,5 @@ +scalaVersion := "2.12.1" +scalacOptions += "-Xfatal-warnings" // required for the test + +enablePlugins(ScalaUnidocPlugin) +autoAPIMappings := true diff --git a/sbt/src/sbt-test/plugins/unidoc/project/extra.sbt b/sbt/src/sbt-test/plugins/unidoc/project/extra.sbt new file mode 100644 index 000000000..ade7d89a5 --- /dev/null +++ b/sbt/src/sbt-test/plugins/unidoc/project/extra.sbt @@ -0,0 +1 @@ +addSbtPlugin("com.eed3si9n" % "sbt-unidoc" % "0.4.2") diff --git a/sbt/src/sbt-test/plugins/unidoc/src/main/scala/Foo.scala b/sbt/src/sbt-test/plugins/unidoc/src/main/scala/Foo.scala new file mode 100644 index 000000000..b5ba8323e --- /dev/null +++ b/sbt/src/sbt-test/plugins/unidoc/src/main/scala/Foo.scala @@ -0,0 +1,3 @@ + +/** Default instances for Scala's [[scala.concurrent.Future Future]]. */ +class Foo diff --git a/sbt/src/sbt-test/plugins/unidoc/test b/sbt/src/sbt-test/plugins/unidoc/test new file mode 100644 index 000000000..7439923b4 --- /dev/null +++ b/sbt/src/sbt-test/plugins/unidoc/test @@ -0,0 +1 @@ +> unidoc diff --git a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala index bc71ce893..a3fb7cf27 100644 --- a/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala +++ b/scripted-sbt-redux/src/main/scala/sbt/scriptedtest/ScriptedTests.scala @@ -167,94 +167,59 @@ final class ScriptedTests( import RemoteSbtCreatorKind._ val (group, name) = testName s"$group/$name" match { - case "actions/add-alias" => LauncherBased // sbt/Package$ - case "actions/cross-multiproject" => LauncherBased // tbd - case "actions/external-doc" => LauncherBased // sbt/Package$ - case "actions/input-task" => LauncherBased // sbt/Package$ - case "actions/input-task-dyn" => LauncherBased // sbt/Package$ - case "classloader-cache/akka-actor-system" => LauncherBased // sbt/Package$ - case "classloader-cache/jni" => LauncherBased // sbt/Package$ - case "classloader-cache/library-mismatch" => LauncherBased // sbt/Package$ - case "classloader-cache/runtime-layers" => LauncherBased // sbt/Package$ - case "classloader-cache/package-private" => LauncherBased // sbt/Package$ - case "compiler-project/dotty-compiler-plugin" => LauncherBased // sbt/Package$ - case "compiler-project/run-test" => LauncherBased // sbt/Package$ - case "compiler-project/src-dep-plugin" => LauncherBased // sbt/Package$ - case "dependency-management/artifact" => LauncherBased // tbd - case "dependency-management/cache-classifiers" => LauncherBased // tbd - case "dependency-management/cache-local" => LauncherBased // tbd - case "dependency-management/cache-resolver" => LauncherBased // sbt/Package$ - case "dependency-management/cache-update" => LauncherBased // tbd - case "dependency-management/cached-resolution-circular" => LauncherBased // tbd - case "dependency-management/cached-resolution-classifier" => LauncherBased // tbd - case "dependency-management/cached-resolution-configurations" => LauncherBased // tbd - case "dependency-management/cached-resolution-conflicts" => LauncherBased // tbd - case "dependency-management/cached-resolution-exclude" => LauncherBased // tbd - case "dependency-management/cached-resolution-force" => LauncherBased // tbd - case "dependency-management/cached-resolution-interproj" => LauncherBased // tbd - case "dependency-management/cached-resolution-overrides" => LauncherBased // tbd - case "dependency-management/chainresolver" => LauncherBased // tbd - case "dependency-management/circular-dependency" => LauncherBased // tbd - case "dependency-management/classifier" => LauncherBased // tbd - case "dependency-management/default-resolvers" => LauncherBased // tbd - case "dependency-management/deliver-artifacts" => LauncherBased // tbd - case "dependency-management/exclude-transitive" => LauncherBased // tbd - case "dependency-management/extra" => LauncherBased // tbd - case "dependency-management/force" => LauncherBased // tbd - case "dependency-management/info" => LauncherBased // tbd - case "dependency-management/inline-dependencies-a" => LauncherBased // tbd - case "dependency-management/ivy-settings-c" => LauncherBased // sbt/Package$ - case "dependency-management/latest-local-plugin" => LauncherBased // sbt/Package$ - case "dependency-management/metadata-only-resolver" => LauncherBased // tbd - case "dependency-management/no-file-fails-publish" => LauncherBased // tbd - case "dependency-management/override" => LauncherBased // tbd - case "dependency-management/parent-publish" => LauncherBased // sbt/Package$ - case "dependency-management/pom-parent-pom" => LauncherBased // tbd - case "dependency-management/publish-to-maven-local-file" => LauncherBased // sbt/Package$ - case "dependency-management/snapshot-resolution" => LauncherBased // tbd - case "dependency-management/snapshot-local" => LauncherBased // tbd - case "dependency-management/test-artifact" => LauncherBased // sbt/Package$ - case "dependency-management/transitive-version-range" => LauncherBased // tbd - case "dependency-management/update-sbt-classifiers" => LauncherBased // tbd - case "dependency-management/url" => LauncherBased // tbd - case "java/argfile" => LauncherBased // sbt/Package$ - case "java/cross" => LauncherBased // sbt/Package$ - case "java/basic" => LauncherBased // sbt/Package$ - case "java/varargs-main" => LauncherBased // sbt/Package$ - case "package/lazy-name" => LauncherBased // sbt/Package$ - case "package/manifest" => LauncherBased // sbt/Package$ - case "package/resources" => LauncherBased // sbt/Package$ - case "project/Class.forName" => LauncherBased // sbt/Package$ - case "project/binary-plugin" => LauncherBased // sbt/Package$ - case "project/default-settings" => LauncherBased // sbt/Package$ - case "project/extra" => LauncherBased // tbd - case "project/flatten" => LauncherBased // sbt/Package$ - case "project/generated-root-no-publish" => LauncherBased // tbd - case "project/giter8-plugin" => LauncherBased // tbd - case "project/lib" => LauncherBased // sbt/Package$ - case "project/scripted-plugin" => LauncherBased // tbd - case "project/scripted-skip-incompatible" => LauncherBased // sbt/Package$ - case "project/session-update-from-cmd" => LauncherBased // tbd - case "project/transitive-plugins" => LauncherBased // tbd - case "run/awt" => LauncherBased // sbt/Package$ - case "run/classpath" => LauncherBased // sbt/Package$ - case "run/daemon" => LauncherBased // sbt/Package$ - case "run/daemon-exit" => LauncherBased // sbt/Package$ - case "run/error" => LauncherBased // sbt/Package$ - case "run/fork" => LauncherBased // sbt/Package$ - case "run/fork-loader" => LauncherBased // sbt/Package$ - case "run/non-local-main" => LauncherBased // sbt/Package$ - case "run/spawn" => LauncherBased // sbt/Package$ - case "run/spawn-exit" => LauncherBased // sbt/Package$ - case "source-dependencies/binary" => LauncherBased // sbt/Package$ - case "source-dependencies/export-jars" => LauncherBased // sbt/Package$ - case "source-dependencies/implicit-search" => LauncherBased // sbt/Package$ - case "source-dependencies/java-basic" => LauncherBased // sbt/Package$ - case "source-dependencies/less-inter-inv" => LauncherBased // sbt/Package$ - case "source-dependencies/less-inter-inv-java" => LauncherBased // sbt/Package$ - case "source-dependencies/linearization" => LauncherBased // sbt/Package$ - case "source-dependencies/named" => LauncherBased // sbt/Package$ - case "source-dependencies/specialized" => LauncherBased // sbt/Package$ + case "actions/add-alias" => LauncherBased // sbt/Package$ + case "actions/cross-multiproject" => LauncherBased // tbd + case "actions/external-doc" => LauncherBased // sbt/Package$ + case "actions/input-task" => LauncherBased // sbt/Package$ + case "actions/input-task-dyn" => LauncherBased // sbt/Package$ + case "classloader-cache/akka-actor-system" => LauncherBased // sbt/Package$ + case "classloader-cache/jni" => LauncherBased // sbt/Package$ + case "classloader-cache/library-mismatch" => LauncherBased // sbt/Package$ + case "classloader-cache/runtime-layers" => LauncherBased // sbt/Package$ + case "classloader-cache/package-private" => LauncherBased // sbt/Package$ + case "compiler-project/dotty-compiler-plugin" => LauncherBased // sbt/Package$ + case "compiler-project/run-test" => LauncherBased // sbt/Package$ + case "compiler-project/src-dep-plugin" => LauncherBased // sbt/Package$ + case gn if gn.startsWith("dependency-management/") => LauncherBased // sbt/Package$ + case gn if gn.startsWith("plugins/") => LauncherBased // sbt/Package$ + case "java/argfile" => LauncherBased // sbt/Package$ + case "java/cross" => LauncherBased // sbt/Package$ + case "java/basic" => LauncherBased // sbt/Package$ + case "java/varargs-main" => LauncherBased // sbt/Package$ + case "package/lazy-name" => LauncherBased // sbt/Package$ + case "package/manifest" => LauncherBased // sbt/Package$ + case "package/resources" => LauncherBased // sbt/Package$ + case "project/Class.forName" => LauncherBased // sbt/Package$ + case "project/binary-plugin" => LauncherBased // sbt/Package$ + case "project/default-settings" => LauncherBased // sbt/Package$ + case "project/extra" => LauncherBased // tbd + case "project/flatten" => LauncherBased // sbt/Package$ + case "project/generated-root-no-publish" => LauncherBased // tbd + case "project/giter8-plugin" => LauncherBased // tbd + case "project/lib" => LauncherBased // sbt/Package$ + case "project/scripted-plugin" => LauncherBased // tbd + case "project/scripted-skip-incompatible" => LauncherBased // sbt/Package$ + case "project/session-update-from-cmd" => LauncherBased // tbd + case "project/transitive-plugins" => LauncherBased // tbd + case "run/awt" => LauncherBased // sbt/Package$ + case "run/classpath" => LauncherBased // sbt/Package$ + case "run/daemon" => LauncherBased // sbt/Package$ + case "run/daemon-exit" => LauncherBased // sbt/Package$ + case "run/error" => LauncherBased // sbt/Package$ + case "run/fork" => LauncherBased // sbt/Package$ + case "run/fork-loader" => LauncherBased // sbt/Package$ + case "run/non-local-main" => LauncherBased // sbt/Package$ + case "run/spawn" => LauncherBased // sbt/Package$ + case "run/spawn-exit" => LauncherBased // sbt/Package$ + case "source-dependencies/binary" => LauncherBased // sbt/Package$ + case "source-dependencies/export-jars" => LauncherBased // sbt/Package$ + case "source-dependencies/implicit-search" => LauncherBased // sbt/Package$ + case "source-dependencies/java-basic" => LauncherBased // sbt/Package$ + case "source-dependencies/less-inter-inv" => LauncherBased // sbt/Package$ + case "source-dependencies/less-inter-inv-java" => LauncherBased // sbt/Package$ + case "source-dependencies/linearization" => LauncherBased // sbt/Package$ + case "source-dependencies/named" => LauncherBased // sbt/Package$ + case "source-dependencies/specialized" => LauncherBased // sbt/Package$ case "tests/test-cross" => LauncherBased // the sbt metabuild classpath leaks into the test interface classloader in older versions of sbt case _ => RunFromSourceBased