Clean up Java version related build properties #26662
This commit is contained in:
parent
3811da6509
commit
5576c233d0
5 changed files with 91 additions and 92 deletions
|
|
@ -6,18 +6,18 @@ package akka
|
|||
|
||||
import java.io.File
|
||||
|
||||
import akka.CrossJava.nullBlank
|
||||
import sbt._
|
||||
|
||||
import scala.annotation.tailrec
|
||||
import scala.collection.immutable.ListMap
|
||||
import sbt._
|
||||
import sbt.librarymanagement.SemanticSelector
|
||||
import sbt.librarymanagement.VersionNumber
|
||||
import akka.CrossJava.nullBlank
|
||||
|
||||
/*
|
||||
* Tools for discovering different Java versions,
|
||||
* will be in sbt 1.3.0 (https://github.com/sbt/sbt/pull/4139 et al)
|
||||
* but until that time replicated here
|
||||
*/
|
||||
|
||||
case class JavaVersion(numbers: Vector[Long], vendor: Option[String]) {
|
||||
def numberStr: String = numbers.mkString(".")
|
||||
|
||||
|
|
@ -30,10 +30,26 @@ case class JavaVersion(numbers: Vector[Long], vendor: Option[String]) {
|
|||
}
|
||||
}
|
||||
object JavaVersion {
|
||||
|
||||
val specificationVersion: String = sys.props("java.specification.version")
|
||||
|
||||
val version: String = sys.props("java.version")
|
||||
|
||||
def isJdk8: Boolean =
|
||||
VersionNumber(specificationVersion).matchesSemVer(SemanticSelector(s"=1.8"))
|
||||
|
||||
val isJdk11orHigher: Boolean =
|
||||
VersionNumber(specificationVersion).matchesSemVer(SemanticSelector(">=11"))
|
||||
|
||||
def apply(version: String): JavaVersion = CrossJava.parseJavaVersion(version)
|
||||
def apply(numbers: Vector[Long], vendor: String): JavaVersion = new JavaVersion(numbers, Option(vendor))
|
||||
}
|
||||
|
||||
def notOnJdk8[T](values: Seq[T]): Seq[T] = if (isJdk8) Seq.empty[T] else values
|
||||
|
||||
def sourceAndTarget(fullJavaHome: File): Seq[String] =
|
||||
if (isJdk8) Seq.empty
|
||||
else Seq("-source", "8", "-target", "8", "-bootclasspath", fullJavaHome + "/jre/lib/rt.jar")
|
||||
}
|
||||
|
||||
object CrossJava {
|
||||
object Keys {
|
||||
|
|
@ -47,8 +63,7 @@ object CrossJava {
|
|||
val crossJavaSettings = Seq(
|
||||
discoveredJavaHomes := CrossJava.discoverJavaHomes,
|
||||
javaHomes := ListMap.empty,
|
||||
fullJavaHomes := CrossJava.expandJavaHomes(discoveredJavaHomes.value ++ javaHomes.value),
|
||||
)
|
||||
fullJavaHomes := CrossJava.expandJavaHomes(discoveredJavaHomes.value ++ javaHomes.value))
|
||||
|
||||
// parses jabaa style version number adopt@1.8
|
||||
def parseJavaVersion(version: String): JavaVersion = {
|
||||
|
|
@ -70,7 +85,7 @@ object CrossJava {
|
|||
}
|
||||
|
||||
def discoverJavaHomes: ListMap[String, File] = {
|
||||
ListMap(JavaDiscoverConfig.configs flatMap { _.javaHomes } sortWith (versionOrder): _*)
|
||||
ListMap(JavaDiscoverConfig.configs.flatMap { _.javaHomes }.sortWith(versionOrder): _*)
|
||||
}
|
||||
|
||||
sealed trait JavaDiscoverConf {
|
||||
|
|
@ -104,31 +119,28 @@ object CrossJava {
|
|||
|
||||
class LinuxDiscoverConfig(base: File) extends JavaDiscoverConf {
|
||||
def javaHomes: Vector[(String, File)] =
|
||||
wrapNull(base.list())
|
||||
.collect {
|
||||
case dir@JavaHomeDir(_, m, n) => JavaVersion(nullBlank(m) + n).toString -> (base / dir)
|
||||
}
|
||||
wrapNull(base.list()).collect {
|
||||
case dir @ JavaHomeDir(_, m, n) => JavaVersion(nullBlank(m) + n).toString -> (base / dir)
|
||||
}
|
||||
}
|
||||
|
||||
class MacOsDiscoverConfig extends JavaDiscoverConf {
|
||||
val base: File = file("/Library") / "Java" / "JavaVirtualMachines"
|
||||
|
||||
def javaHomes: Vector[(String, File)] =
|
||||
wrapNull(base.list())
|
||||
.collect {
|
||||
case dir@JavaHomeDir(_, m, n) =>
|
||||
JavaVersion(nullBlank(m) + n).toString -> (base / dir / "Contents" / "Home")
|
||||
}
|
||||
wrapNull(base.list()).collect {
|
||||
case dir @ JavaHomeDir(_, m, n) =>
|
||||
JavaVersion(nullBlank(m) + n).toString -> (base / dir / "Contents" / "Home")
|
||||
}
|
||||
}
|
||||
|
||||
class WindowsDiscoverConfig extends JavaDiscoverConf {
|
||||
val base: File = file("C://Program Files/Java")
|
||||
|
||||
def javaHomes: Vector[(String, File)] =
|
||||
wrapNull(base.list())
|
||||
.collect {
|
||||
case dir@JavaHomeDir(_, m, n) => JavaVersion(nullBlank(m) + n).toString -> (base / dir)
|
||||
}
|
||||
wrapNull(base.list()).collect {
|
||||
case dir @ JavaHomeDir(_, m, n) => JavaVersion(nullBlank(m) + n).toString -> (base / dir)
|
||||
}
|
||||
}
|
||||
|
||||
// See https://github.com/shyiko/jabba
|
||||
|
|
@ -137,25 +149,25 @@ object CrossJava {
|
|||
val JavaHomeDir = """([\w\-]+)\@(1\.)?([0-9]+).*""".r
|
||||
|
||||
def javaHomes: Vector[(String, File)] =
|
||||
wrapNull(base.list())
|
||||
.collect {
|
||||
case dir@JavaHomeDir(_, m, n) =>
|
||||
val v = JavaVersion(nullBlank(m) + n).toString
|
||||
if ((base / dir / "Contents" / "Home").exists) v -> (base / dir / "Contents" / "Home")
|
||||
else v -> (base / dir)
|
||||
}
|
||||
wrapNull(base.list()).collect {
|
||||
case dir @ JavaHomeDir(_, m, n) =>
|
||||
val v = JavaVersion(nullBlank(m) + n).toString
|
||||
if ((base / dir / "Contents" / "Home").exists) v -> (base / dir / "Contents" / "Home")
|
||||
else v -> (base / dir)
|
||||
}
|
||||
}
|
||||
|
||||
class JavaHomeDiscoverConfig extends JavaDiscoverConf {
|
||||
def javaHomes: Vector[(String, File)] =
|
||||
sys.env.get("JAVA_HOME")
|
||||
sys.env
|
||||
.get("JAVA_HOME")
|
||||
.map(new java.io.File(_))
|
||||
.filter(_.exists())
|
||||
.flatMap { javaHome =>
|
||||
val base = javaHome.getParentFile
|
||||
javaHome.getName match {
|
||||
case dir@JavaHomeDir(_, m, n) => Some(JavaVersion(nullBlank(m) + n).toString -> (base / dir))
|
||||
case _ => None
|
||||
case dir @ JavaHomeDir(_, m, n) => Some(JavaVersion(nullBlank(m) + n).toString -> (base / dir))
|
||||
case _ => None
|
||||
}
|
||||
}
|
||||
.toVector
|
||||
|
|
@ -167,21 +179,19 @@ object CrossJava {
|
|||
new LinuxDiscoverConfig(file("/usr") / "lib" / "jvm"),
|
||||
new MacOsDiscoverConfig,
|
||||
new WindowsDiscoverConfig,
|
||||
new JavaHomeDiscoverConfig,
|
||||
)
|
||||
new JavaHomeDiscoverConfig)
|
||||
}
|
||||
|
||||
def nullBlank(s: String): String =
|
||||
if (s eq null) ""
|
||||
else s
|
||||
|
||||
def nullBlank(s: String): String =
|
||||
if (s eq null) ""
|
||||
else s
|
||||
|
||||
// expand Java versions to 1-20 to 1.x, and vice versa to accept both "1.8" and "8"
|
||||
private val oneDot = Map((1L to 20L).toVector flatMap { i =>
|
||||
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[String, File]): Map[String, File] =
|
||||
hs flatMap {
|
||||
hs.flatMap {
|
||||
case (k, v) =>
|
||||
val jv = JavaVersion(k)
|
||||
if (oneDot.contains(jv.numbers))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue