mirror of https://github.com/sbt/sbt.git
Discover Oracle JDK installed in /opt
This commit is contained in:
parent
4f27319beb
commit
ae932f7390
|
|
@ -331,7 +331,15 @@ private[sbt] object CrossJava {
|
||||||
}
|
}
|
||||||
|
|
||||||
object JavaDiscoverConfig {
|
object JavaDiscoverConfig {
|
||||||
private val JavaHomeDir = """(java-|jdk-?)(1\.)?([0-9]+).*""".r
|
object JavaHomeDir {
|
||||||
|
private val regex = """(\w+-)?(java-|jdk-?)(bin-)?(1\.)?([0-9]+).*""".r
|
||||||
|
def unapply(s: CharSequence): Option[String] = {
|
||||||
|
s match {
|
||||||
|
case regex(vendor, _, _, m, n) => Some(JavaVersion(nullBlank(m) + n).toString)
|
||||||
|
case _ => None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class LinuxDiscoverConfig(base: File) extends JavaDiscoverConf {
|
class LinuxDiscoverConfig(base: File) extends JavaDiscoverConf {
|
||||||
def candidates() = wrapNull(base.list())
|
def candidates() = wrapNull(base.list())
|
||||||
|
|
@ -339,8 +347,8 @@ private[sbt] object CrossJava {
|
||||||
def javaHomes: Vector[(String, File)] =
|
def javaHomes: Vector[(String, File)] =
|
||||||
candidates()
|
candidates()
|
||||||
.collect {
|
.collect {
|
||||||
case dir @ JavaHomeDir(_, m, n) =>
|
case dir @ JavaHomeDir(version) =>
|
||||||
JavaVersion(nullBlank(m) + n).toString -> (base / dir)
|
version -> (base / dir)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -350,19 +358,19 @@ private[sbt] object CrossJava {
|
||||||
def javaHomes: Vector[(String, File)] =
|
def javaHomes: Vector[(String, File)] =
|
||||||
wrapNull(base.list())
|
wrapNull(base.list())
|
||||||
.collect {
|
.collect {
|
||||||
case dir @ JavaHomeDir(_, m, n) =>
|
case dir @ JavaHomeDir(version) =>
|
||||||
JavaVersion(nullBlank(m) + n).toString -> (base / dir / "Contents" / "Home")
|
version -> (base / dir / "Contents" / "Home")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class JabbaDiscoverConfig extends 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 JabbaJavaHomeDir = """([\w\-]+)\@(1\.)?([0-9]+).*""".r
|
||||||
|
|
||||||
def javaHomes: Vector[(String, File)] =
|
def javaHomes: Vector[(String, File)] =
|
||||||
wrapNull(base.list())
|
wrapNull(base.list())
|
||||||
.collect {
|
.collect {
|
||||||
case dir @ JavaHomeDir(vendor, m, n) =>
|
case dir @ JabbaJavaHomeDir(vendor, m, n) =>
|
||||||
val v = JavaVersion(nullBlank(m) + n).withVendor(vendor).toString
|
val v = JavaVersion(nullBlank(m) + n).withVendor(vendor).toString
|
||||||
if ((base / dir / "Contents" / "Home").exists) v -> (base / dir / "Contents" / "Home")
|
if ((base / dir / "Contents" / "Home").exists) v -> (base / dir / "Contents" / "Home")
|
||||||
else v -> (base / dir)
|
else v -> (base / dir)
|
||||||
|
|
@ -376,21 +384,22 @@ private[sbt] object CrossJava {
|
||||||
def javaHomes: Vector[(String, File)] =
|
def javaHomes: Vector[(String, File)] =
|
||||||
candidates()
|
candidates()
|
||||||
.collect {
|
.collect {
|
||||||
case dir @ JavaHomeDir(_, m, n) =>
|
case dir @ JavaHomeDir(version) =>
|
||||||
JavaVersion(nullBlank(m) + n).toString -> (base / dir)
|
version -> (base / dir)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class JavaHomeDiscoverConfig extends JavaDiscoverConf {
|
class JavaHomeDiscoverConfig extends JavaDiscoverConf {
|
||||||
def home() = sys.env.get("JAVA_HOME")
|
def home() = sys.env.get("JAVA_HOME")
|
||||||
|
|
||||||
def javaHomes: Vector[(String, File)] =
|
def javaHomes: Vector[(String, File)] =
|
||||||
home()
|
home()
|
||||||
.map(new java.io.File(_))
|
.map(new java.io.File(_))
|
||||||
.flatMap { javaHome =>
|
.flatMap { javaHome =>
|
||||||
val base = javaHome.getParentFile
|
val base = javaHome.getParentFile
|
||||||
javaHome.getName match {
|
javaHome.getName match {
|
||||||
case dir @ JavaHomeDir(_, m, n) =>
|
case dir @ JavaHomeDir(version) =>
|
||||||
Some(JavaVersion(nullBlank(m) + n).toString -> (base / dir))
|
Some(version -> (base / dir))
|
||||||
case _ => None
|
case _ => None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ class CrossJavaTest extends Specification {
|
||||||
}
|
}
|
||||||
|
|
||||||
"The JAVA_HOME selector" should {
|
"The JAVA_HOME selector" should {
|
||||||
"correctly pick up a JDK " in {
|
"correctly pick up a JDK" in {
|
||||||
val conf = new JavaHomeDiscoverConfig {
|
val conf = new JavaHomeDiscoverConfig {
|
||||||
override def home() = Some("/opt/jdk8")
|
override def home() = Some("/opt/jdk8")
|
||||||
}
|
}
|
||||||
|
|
@ -70,5 +70,13 @@ class CrossJavaTest extends Specification {
|
||||||
version must equalTo("8")
|
version must equalTo("8")
|
||||||
file.getName must be equalTo ("jdk8")
|
file.getName must be equalTo ("jdk8")
|
||||||
}
|
}
|
||||||
|
"correctly pick up an Oracle JDK" in {
|
||||||
|
val conf = new JavaHomeDiscoverConfig {
|
||||||
|
override def home() = Some("/opt/oracle-jdk-bin-1.8.0.181")
|
||||||
|
}
|
||||||
|
val (version, file) = conf.javaHomes.sortWith(CrossJava.versionOrder).last
|
||||||
|
version must equalTo("1.8")
|
||||||
|
file.getName must be equalTo ("oracle-jdk-bin-1.8.0.181")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue