Discover Linux java versions with full versions (#25302)
* Discover Linux java versions with full versions * Discover java versions from Oracle RPM's
This commit is contained in:
parent
b7f7af0641
commit
bc6cb3b1da
1 changed files with 16 additions and 12 deletions
|
|
@ -65,15 +65,16 @@ object CrossJava {
|
||||||
}
|
}
|
||||||
|
|
||||||
def discoverJavaHomes: ListMap[String, File] = {
|
def discoverJavaHomes: ListMap[String, File] = {
|
||||||
import JavaDiscoverConfig._
|
ListMap(JavaDiscoverConfig.configs flatMap { _.javaHomes } sortWith (versionOrder): _*)
|
||||||
val configs = Vector(jabba, linux, macOS)
|
|
||||||
ListMap(configs flatMap { _.javaHomes }: _*)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sealed trait JavaDiscoverConf {
|
sealed trait JavaDiscoverConf {
|
||||||
def javaHomes: Vector[(String, File)]
|
def javaHomes: Vector[(String, File)]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def versionOrder(left: (_, File), right: (_, File)): Boolean =
|
||||||
|
versionOrder(left._2.getName, right._2.getName)
|
||||||
|
|
||||||
// Sort version strings, considering 1.8.0 < 1.8.0_45 < 1.8.0_121
|
// Sort version strings, considering 1.8.0 < 1.8.0_45 < 1.8.0_121
|
||||||
@tailrec
|
@tailrec
|
||||||
def versionOrder(left: String, right: String): Boolean = {
|
def versionOrder(left: String, right: String): Boolean = {
|
||||||
|
|
@ -94,25 +95,22 @@ object CrossJava {
|
||||||
}
|
}
|
||||||
|
|
||||||
object JavaDiscoverConfig {
|
object JavaDiscoverConfig {
|
||||||
val linux = new JavaDiscoverConf {
|
class LinuxDiscoverConfig(base: File) extends JavaDiscoverConf {
|
||||||
val base: File = file("/usr") / "lib" / "jvm"
|
val JavaHomeDir = """(java-|jdk)(1\.)?([0-9]+).*""".r
|
||||||
val JavaHomeDir = """java-([0-9]+)-.*""".r
|
|
||||||
|
|
||||||
def javaHomes: Vector[(String, File)] =
|
def javaHomes: Vector[(String, File)] =
|
||||||
wrapNull(base.list())
|
wrapNull(base.list())
|
||||||
.sortWith(versionOrder)
|
|
||||||
.collect {
|
.collect {
|
||||||
case dir@JavaHomeDir(ver) => JavaVersion(ver).toString -> (base / dir)
|
case dir@JavaHomeDir(_, m, n) => JavaVersion(nullBlank(m) + n).toString -> (base / dir)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val macOS = new JavaDiscoverConf {
|
class MacOsDiscoverConfig extends JavaDiscoverConf {
|
||||||
val base: File = file("/Library") / "Java" / "JavaVirtualMachines"
|
val base: File = file("/Library") / "Java" / "JavaVirtualMachines"
|
||||||
val JavaHomeDir = """jdk-?(1\.)?([0-9]+).*""".r
|
val JavaHomeDir = """jdk-?(1\.)?([0-9]+).*""".r
|
||||||
|
|
||||||
def javaHomes: Vector[(String, File)] =
|
def javaHomes: Vector[(String, File)] =
|
||||||
wrapNull(base.list())
|
wrapNull(base.list())
|
||||||
.sortWith(versionOrder)
|
|
||||||
.collect {
|
.collect {
|
||||||
case dir@JavaHomeDir(m, n) =>
|
case dir@JavaHomeDir(m, n) =>
|
||||||
JavaVersion(nullBlank(m) + n).toString -> (base / dir / "Contents" / "Home")
|
JavaVersion(nullBlank(m) + n).toString -> (base / dir / "Contents" / "Home")
|
||||||
|
|
@ -120,13 +118,12 @@ object CrossJava {
|
||||||
}
|
}
|
||||||
|
|
||||||
// See https://github.com/shyiko/jabba
|
// See https://github.com/shyiko/jabba
|
||||||
val jabba = new JavaDiscoverConf {
|
class JabbaDiscoverConfig extends JavaDiscoverConf {
|
||||||
val base: File = Path.userHome / ".jabba" / "jdk"
|
val base: File = Path.userHome / ".jabba" / "jdk"
|
||||||
val JavaHomeDir = """([\w\-]+)\@(1\.)?([0-9]+).*""".r
|
val JavaHomeDir = """([\w\-]+)\@(1\.)?([0-9]+).*""".r
|
||||||
|
|
||||||
def javaHomes: Vector[(String, File)] =
|
def javaHomes: Vector[(String, File)] =
|
||||||
wrapNull(base.list())
|
wrapNull(base.list())
|
||||||
.sortWith(versionOrder)
|
|
||||||
.collect {
|
.collect {
|
||||||
case dir@JavaHomeDir(vendor, m, n) =>
|
case dir@JavaHomeDir(vendor, m, n) =>
|
||||||
val v = JavaVersion(nullBlank(m) + n).withVendor(vendor).toString
|
val v = JavaVersion(nullBlank(m) + n).withVendor(vendor).toString
|
||||||
|
|
@ -134,6 +131,13 @@ object CrossJava {
|
||||||
else v -> (base / dir)
|
else v -> (base / dir)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val configs = Vector(
|
||||||
|
new JabbaDiscoverConfig,
|
||||||
|
new LinuxDiscoverConfig(file("/usr") / "java"),
|
||||||
|
new LinuxDiscoverConfig(file("/usr") / "lib" / "jvm"),
|
||||||
|
new MacOsDiscoverConfig,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
def nullBlank(s: String): String =
|
def nullBlank(s: String): String =
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue