Skip to content

Commit 5f56fce

Browse files
authored
Merge pull request sbt#6684 from kxbmap/win-jdk-distributions
Add Windows Java home selectors for some distributions
2 parents 35003a0 + 24e7398 commit 5f56fce

File tree

2 files changed

+38
-8
lines changed

2 files changed

+38
-8
lines changed

main/src/main/scala/sbt/internal/CrossJava.scala

+28-8
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import java.io.File
1212
import scala.collection.immutable.ListMap
1313
import scala.annotation.tailrec
1414
import scala.util.{ Try, Success, Failure }
15-
import sbt.io.Path
15+
import sbt.io.{ IO, Path }
1616
import sbt.io.syntax._
1717
import sbt.Cross._
1818
import sbt.Def.{ ScopedKey, Setting }
@@ -389,7 +389,7 @@ private[sbt] object CrossJava {
389389

390390
object JavaDiscoverConfig {
391391
object JavaHomeDir {
392-
private val regex = """(\w+-)?(java-|(?:adoptopen)?jdk-?)(bin-)?(1\.)?([0-9]+).*""".r
392+
private val regex = """(\w+-)??(java-|(?:adoptopen)?jdk-?)?(bin-)?(1\.)?([0-9]+).*""".r
393393
def unapply(s: CharSequence): Option[String] = {
394394
s match {
395395
case regex(vendor, _, _, m, n) => Some(JavaVersion(nullBlank(m) + n).toString)
@@ -447,15 +447,21 @@ private[sbt] object CrossJava {
447447
}.flatten
448448
}
449449

450-
class WindowsDiscoverConfig(base: File) extends JavaDiscoverConf {
450+
class WindowsDiscoverConfig(base: File, vendors: Seq[String] = Seq.empty)
451+
extends JavaDiscoverConf {
451452

452453
def candidates() = wrapNull(base.list())
453454

454455
def javaHomes: Vector[(String, File)] =
455456
candidates()
456457
.collect {
457-
case dir @ JavaHomeDir(version) =>
458-
version -> (base / dir)
458+
case dir @ JavaHomeDir(version) => version -> base / dir
459+
}
460+
.flatMap {
461+
case x if vendors.isEmpty => Vector(x)
462+
case (version, home) =>
463+
val jv = JavaVersion(version)
464+
vendors.map(jv.withVendor(_).toString -> home)
459465
}
460466
}
461467

@@ -482,10 +488,24 @@ private[sbt] object CrossJava {
482488
new LinuxDiscoverConfig(file("/usr") / "java"),
483489
new LinuxDiscoverConfig(file("/usr") / "lib" / "jvm"),
484490
new MacOsDiscoverConfig,
485-
new WindowsDiscoverConfig(file("C://Program Files/Java")),
486-
new WindowsDiscoverConfig(file("C://Program Files (x86)/Java")),
487491
new JavaHomeDiscoverConfig,
488-
)
492+
) ++ {
493+
if (IO.isWindows) {
494+
def discover(dir: String, vendors: String*) = new WindowsDiscoverConfig(file(dir), vendors)
495+
Vector(
496+
discover("C://Program Files/Java", "openjdk"),
497+
discover("C://Program Files/Eclipse Foundation", "temurin", "adopt"),
498+
discover("C://Program Files/Semeru", "semeru", "adopt-openj9"),
499+
discover("C://Program Files/Microsoft", "microsoft"),
500+
discover("C://Program Files/Amazon Corretto", "amazon-corretto"),
501+
discover("C://Program Files/Zulu", "zulu"),
502+
discover("C://Program Files/BellSoft", "liberica"),
503+
discover("C://Program Files (x86)/Java", "openjdk"),
504+
discover("C://Program Files (x86)/Eclipse Foundation", "temurin", "adopt"),
505+
discover("C://Program Files (x86)/Semeru", "semeru", "adopt-openj9"),
506+
)
507+
} else Vector.empty
508+
}
489509
}
490510

491511
def nullBlank(s: String): String =

main/src/test/scala/sbt/internal/CrossJavaTest.scala

+10
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,16 @@ class CrossJavaTest extends FunSuite with DiagrammedAssertions {
5959
assert(file.getName == "jdk1.7.0")
6060
}
6161

62+
test("The Windows Java home selector should correctly pick up a JDK with vendors") {
63+
val conf = new WindowsDiscoverConfig(sbt.io.syntax.file("."), Seq("xxx", "yyy")) {
64+
override def candidates() = Vector("jdk1.7.0")
65+
}
66+
val homes = conf.javaHomes
67+
assert(homes.size == 2)
68+
assert(homes.map(_._1) == Vector("[email protected]", "[email protected]"))
69+
assert(homes.map(_._2.getName).forall(_ == "jdk1.7.0"))
70+
}
71+
6272
test("The JAVA_HOME selector should correctly pick up a JDK") {
6373
val conf = new JavaHomeDiscoverConfig {
6474
override def home() = Some("/opt/jdk8")

0 commit comments

Comments
 (0)