mirror of https://github.com/sbt/sbt.git
use stringly-typed key so we can define it machine-wide
This commit is contained in:
parent
72ebdeb199
commit
9b7c224f93
|
|
@ -222,7 +222,7 @@ object Keys {
|
|||
val scalaCompilerBridgeSource = settingKey[ModuleID]("Configures the module ID of the sources of the compiler bridge.").withRank(CSetting)
|
||||
val scalaArtifacts = settingKey[Seq[String]]("Configures the list of artifacts which should match the Scala binary version").withRank(CSetting)
|
||||
val enableBinaryCompileAnalysis = settingKey[Boolean]("Writes the analysis file in binary format")
|
||||
val crossJavaVersions = settingKey[Seq[JavaVersion]]("The java versions used during JDK cross testing").withRank(BPlusSetting)
|
||||
val crossJavaVersions = settingKey[Seq[String]]("The java versions used during JDK cross testing").withRank(BPlusSetting)
|
||||
|
||||
val clean = taskKey[Unit]("Deletes files produced by the build, such as generated sources, compiled classes, and task caches.").withRank(APlusTask)
|
||||
val console = taskKey[Unit]("Starts the Scala interpreter with the project classes on the classpath.").withRank(APlusTask)
|
||||
|
|
@ -272,9 +272,9 @@ object Keys {
|
|||
val outputStrategy = settingKey[Option[sbt.OutputStrategy]]("Selects how to log output when running a main class.").withRank(DSetting)
|
||||
val connectInput = settingKey[Boolean]("If true, connects standard input when running a main class forked.").withRank(CSetting)
|
||||
val javaHome = settingKey[Option[File]]("Selects the Java installation used for compiling and forking. If None, uses the Java installation running the build.").withRank(ASetting)
|
||||
val discoveredJavaHomes = settingKey[Map[JavaVersion, File]]("Discovered Java home directories")
|
||||
val javaHomes = settingKey[Map[JavaVersion, File]]("The user-defined additional Java home directories")
|
||||
val fullJavaHomes = settingKey[Map[JavaVersion, File]]("Combines discoveredJavaHomes and custom javaHomes.").withRank(CTask)
|
||||
val discoveredJavaHomes = settingKey[Map[String, File]]("Discovered Java home directories")
|
||||
val javaHomes = settingKey[Map[String, File]]("The user-defined additional Java home directories")
|
||||
val fullJavaHomes = settingKey[Map[String, File]]("Combines discoveredJavaHomes and custom javaHomes.").withRank(CTask)
|
||||
|
||||
val javaOptions = taskKey[Seq[String]]("Options passed to a new JVM when forking.").withRank(BPlusTask)
|
||||
val envVars = taskKey[Map[String, String]]("Environment variables used when forking a new JVM").withRank(BTask)
|
||||
|
|
|
|||
|
|
@ -44,6 +44,11 @@ private[sbt] object CrossJava {
|
|||
}
|
||||
}
|
||||
|
||||
def lookupJavaHome(jv: String, mappings: Map[String, File]): File = {
|
||||
val ms = mappings map { case (k, v) => (JavaVersion(k), v) }
|
||||
lookupJavaHome(JavaVersion(jv), ms)
|
||||
}
|
||||
|
||||
def lookupJavaHome(jv: JavaVersion, mappings: Map[JavaVersion, File]): File = {
|
||||
mappings.get(jv) match {
|
||||
case Some(dir) => dir
|
||||
|
|
@ -72,7 +77,7 @@ private[sbt] object CrossJava {
|
|||
def versionAndCommand(spacePresent: Boolean) = {
|
||||
val x = Project.extract(state)
|
||||
import x._
|
||||
val javaHomes = getJavaHomes(x, currentRef)
|
||||
val javaHomes = getJavaHomesTyped(x, currentRef)
|
||||
val knownVersions = javaHomes.keysIterator.map(_.numberStr).toVector
|
||||
val version: Parser[SwitchTarget] =
|
||||
(token(
|
||||
|
|
@ -105,15 +110,22 @@ private[sbt] object CrossJava {
|
|||
private def getJavaHomes(
|
||||
extracted: Extracted,
|
||||
proj: ResolvedReference
|
||||
): Map[JavaVersion, File] = {
|
||||
): Map[String, File] = {
|
||||
import extracted._
|
||||
(Keys.fullJavaHomes in proj get structure.data).get
|
||||
}
|
||||
|
||||
private def getJavaHomesTyped(
|
||||
extracted: Extracted,
|
||||
proj: ResolvedReference
|
||||
): Map[JavaVersion, File] = {
|
||||
getJavaHomes(extracted, proj) map { case (k, v) => (JavaVersion(k), v) }
|
||||
}
|
||||
|
||||
private def getCrossJavaVersions(
|
||||
extracted: Extracted,
|
||||
proj: ResolvedReference
|
||||
): Seq[JavaVersion] = {
|
||||
): Seq[String] = {
|
||||
import extracted._
|
||||
import Keys._
|
||||
(crossJavaVersions in proj get structure.data).getOrElse(Nil)
|
||||
|
|
@ -138,7 +150,7 @@ private[sbt] object CrossJava {
|
|||
// filter out subprojects based on switch target e.g. "10" vs what's in crossJavaVersions
|
||||
// for the subproject. Only if crossJavaVersions is non-empty, and does NOT include "10"
|
||||
// it will skip the subproject.
|
||||
val projects: Seq[(ResolvedReference, Seq[JavaVersion])] = {
|
||||
val projects: Seq[(ResolvedReference, Seq[String])] = {
|
||||
val projectJavaVersions =
|
||||
structure.allProjectRefs.map(proj => proj -> getCrossJavaVersions(extracted, proj))
|
||||
if (switch.target.force) projectJavaVersions
|
||||
|
|
@ -157,7 +169,7 @@ private[sbt] object CrossJava {
|
|||
def setJavaHomeForProjects: State = {
|
||||
val newSettings = projects.flatMap {
|
||||
case (proj, javaVersions) =>
|
||||
val fjh = getJavaHomes(extracted, proj)
|
||||
val fjh = getJavaHomesTyped(extracted, proj)
|
||||
val home = switch.target match {
|
||||
case SwitchTarget(Some(v), _, _) => lookupJavaHome(v, fjh)
|
||||
case SwitchTarget(_, Some(h), _) => h
|
||||
|
|
@ -286,33 +298,33 @@ private[sbt] object CrossJava {
|
|||
state.put(JavaCapturedSession, extracted.session.rawAppend)
|
||||
}
|
||||
|
||||
def discoverJavaHomes: ListMap[JavaVersion, File] = {
|
||||
def discoverJavaHomes: ListMap[String, File] = {
|
||||
import JavaDiscoverConfig._
|
||||
val configs = Vector(jabba, linux, macOS)
|
||||
ListMap(configs flatMap { _.javaHomes }: _*)
|
||||
}
|
||||
|
||||
sealed trait JavaDiscoverConf {
|
||||
def javaHomes: Vector[(JavaVersion, File)]
|
||||
def javaHomes: Vector[(String, File)]
|
||||
}
|
||||
|
||||
object JavaDiscoverConfig {
|
||||
val linux = new JavaDiscoverConf {
|
||||
val base: File = file("/usr") / "lib" / "jvm"
|
||||
val JavaHomeDir = """java-([0-9]+)-.*""".r
|
||||
def javaHomes: Vector[(JavaVersion, File)] =
|
||||
def javaHomes: Vector[(String, File)] =
|
||||
wrapNull(base.list()).collect {
|
||||
case dir @ JavaHomeDir(ver) => JavaVersion(ver) -> (base / dir)
|
||||
case dir @ JavaHomeDir(ver) => JavaVersion(ver).toString -> (base / dir)
|
||||
}
|
||||
}
|
||||
|
||||
val macOS = new JavaDiscoverConf {
|
||||
val base: File = file("/Library") / "Java" / "JavaVirtualMachines"
|
||||
val JavaHomeDir = """jdk-?(1\.)?([0-9]+).*""".r
|
||||
def javaHomes: Vector[(JavaVersion, File)] =
|
||||
def javaHomes: Vector[(String, File)] =
|
||||
wrapNull(base.list()).collect {
|
||||
case dir @ JavaHomeDir(m, n) =>
|
||||
JavaVersion(nullBlank(m) + n) -> (base / dir / "Contents" / "Home")
|
||||
JavaVersion(nullBlank(m) + n).toString -> (base / dir / "Contents" / "Home")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -320,10 +332,10 @@ private[sbt] object CrossJava {
|
|||
val jabba = new JavaDiscoverConf {
|
||||
val base: File = Path.userHome / ".jabba" / "jdk"
|
||||
val JavaHomeDir = """([\w\-]+)\@(1\.)?([0-9]+).*""".r
|
||||
def javaHomes: Vector[(JavaVersion, File)] =
|
||||
def javaHomes: Vector[(String, File)] =
|
||||
wrapNull(base.list()).collect {
|
||||
case dir @ JavaHomeDir(vendor, m, n) =>
|
||||
val v = JavaVersion(nullBlank(m) + n).withVendor(vendor)
|
||||
val v = JavaVersion(nullBlank(m) + n).withVendor(vendor).toString
|
||||
if ((base / dir / "Contents" / "Home").exists) v -> (base / dir / "Contents" / "Home")
|
||||
else v -> (base / dir)
|
||||
}
|
||||
|
|
@ -338,10 +350,12 @@ private[sbt] object CrossJava {
|
|||
private val oneDot = Map((1L to 20L).toVector flatMap { i =>
|
||||
Vector(Vector(i) -> Vector(1L, i), Vector(1L, i) -> Vector(i))
|
||||
}: _*)
|
||||
def expandJavaHomes(hs: Map[JavaVersion, File]): Map[JavaVersion, File] =
|
||||
def expandJavaHomes(hs: Map[String, File]): Map[String, File] =
|
||||
hs flatMap {
|
||||
case (k, v) =>
|
||||
if (oneDot.contains(k.numbers)) Vector(k -> v, k.withNumbers(oneDot(k.numbers)) -> v)
|
||||
val jv = JavaVersion(k)
|
||||
if (oneDot.contains(jv.numbers))
|
||||
Vector(k -> v, jv.withNumbers(oneDot(jv.numbers)).toString -> v)
|
||||
else Vector(k -> v)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ val check = inputKey[Unit]("Runs the check")
|
|||
lazy val root = (project in file("."))
|
||||
.settings(
|
||||
ThisBuild / scalaVersion := "2.12.6",
|
||||
crossJavaVersions := List(JavaVersion("1.8")),
|
||||
crossJavaVersions := List("1.8"),
|
||||
|
||||
// read out.txt and see if it starts with the passed in number
|
||||
check := {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
Global / javaHomes += JavaVersion("6") -> file("/good/old/times/java-6")
|
||||
Global / javaHomes += "6" -> file("/good/old/times/java-6")
|
||||
|
||||
TaskKey[Unit]("check") := {
|
||||
assert(fullJavaHomes.value(JavaVersion("1.6")).getAbsolutePath.contains("java-6"))
|
||||
assert(fullJavaHomes.value("1.6").getAbsolutePath.contains("java-6"))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -206,6 +206,7 @@ final class ScriptedTests(
|
|||
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$
|
||||
|
|
|
|||
Loading…
Reference in New Issue