@@ -12,7 +12,7 @@ import java.io.File
12
12
import scala .collection .immutable .ListMap
13
13
import scala .annotation .tailrec
14
14
import scala .util .{ Try , Success , Failure }
15
- import sbt .io .Path
15
+ import sbt .io .{ IO , Path }
16
16
import sbt .io .syntax ._
17
17
import sbt .Cross ._
18
18
import sbt .Def .{ ScopedKey , Setting }
@@ -389,7 +389,7 @@ private[sbt] object CrossJava {
389
389
390
390
object JavaDiscoverConfig {
391
391
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
393
393
def unapply (s : CharSequence ): Option [String ] = {
394
394
s match {
395
395
case regex(vendor, _, _, m, n) => Some (JavaVersion (nullBlank(m) + n).toString)
@@ -447,15 +447,21 @@ private[sbt] object CrossJava {
447
447
}.flatten
448
448
}
449
449
450
- class WindowsDiscoverConfig (base : File ) extends JavaDiscoverConf {
450
+ class WindowsDiscoverConfig (base : File , vendors : Seq [String ] = Seq .empty)
451
+ extends JavaDiscoverConf {
451
452
452
453
def candidates () = wrapNull(base.list())
453
454
454
455
def javaHomes : Vector [(String , File )] =
455
456
candidates()
456
457
.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)
459
465
}
460
466
}
461
467
@@ -482,10 +488,24 @@ private[sbt] object CrossJava {
482
488
new LinuxDiscoverConfig (file(" /usr" ) / " java" ),
483
489
new LinuxDiscoverConfig (file(" /usr" ) / " lib" / " jvm" ),
484
490
new MacOsDiscoverConfig ,
485
- new WindowsDiscoverConfig (file(" C://Program Files/Java" )),
486
- new WindowsDiscoverConfig (file(" C://Program Files (x86)/Java" )),
487
491
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
+ }
489
509
}
490
510
491
511
def nullBlank (s : String ): String =
0 commit comments