mirror of https://github.com/sbt/sbt.git
Discovery of java homes
This commit is contained in:
parent
7f808bd3a1
commit
c31583e4f8
|
|
@ -0,0 +1,40 @@
|
|||
/**
|
||||
* This code is generated using [[http://www.scala-sbt.org/contraband/ sbt-contraband]].
|
||||
*/
|
||||
|
||||
// DO NOT EDIT MANUALLY
|
||||
package sbt
|
||||
final class JavaVersion private (
|
||||
val vendor: Option[String],
|
||||
val version: String) extends Serializable {
|
||||
|
||||
|
||||
|
||||
override def equals(o: Any): Boolean = o match {
|
||||
case x: JavaVersion => (this.vendor == x.vendor) && (this.version == x.version)
|
||||
case _ => false
|
||||
}
|
||||
override def hashCode: Int = {
|
||||
37 * (37 * (37 * (17 + "sbt.JavaVersion".##) + vendor.##) + version.##)
|
||||
}
|
||||
override def toString: String = {
|
||||
"JavaVersion(" + vendor + ", " + version + ")"
|
||||
}
|
||||
private[this] def copy(vendor: Option[String] = vendor, version: String = version): JavaVersion = {
|
||||
new JavaVersion(vendor, version)
|
||||
}
|
||||
def withVendor(vendor: Option[String]): JavaVersion = {
|
||||
copy(vendor = vendor)
|
||||
}
|
||||
def withVendor(vendor: String): JavaVersion = {
|
||||
copy(vendor = Option(vendor))
|
||||
}
|
||||
def withVersion(version: String): JavaVersion = {
|
||||
copy(version = version)
|
||||
}
|
||||
}
|
||||
object JavaVersion {
|
||||
def apply(version: String): JavaVersion = new JavaVersion(None, version)
|
||||
def apply(vendor: Option[String], version: String): JavaVersion = new JavaVersion(vendor, version)
|
||||
def apply(vendor: String, version: String): JavaVersion = new JavaVersion(Option(vendor), version)
|
||||
}
|
||||
|
|
@ -17,3 +17,9 @@ enum PluginTrigger {
|
|||
AllRequirements
|
||||
NoTrigger
|
||||
}
|
||||
|
||||
type JavaVersion {
|
||||
vendor: String
|
||||
version: String!
|
||||
#xcompanion def apply(version: String): JavaVersion = new JavaVersion(None, version)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@ import sbt.librarymanagement.syntax._
|
|||
import sbt.util.InterfaceUtil.{ toJavaFunction => f1 }
|
||||
import sbt.util._
|
||||
import sbt.util.CacheImplicits._
|
||||
import scala.collection.immutable.ListMap
|
||||
import scala.concurrent.duration.FiniteDuration
|
||||
import scala.util.control.NonFatal
|
||||
import scala.xml.NodeSeq
|
||||
|
|
@ -159,6 +160,9 @@ object Defaults extends BuildCommon {
|
|||
scalaHome :== None,
|
||||
apiURL := None,
|
||||
javaHome :== None,
|
||||
discoveredJavaHomes := sbt.internal.CrossJava.discoverJavaHomes,
|
||||
javaHomes :== ListMap.empty,
|
||||
fullJavaHomes := discoveredJavaHomes.value ++ javaHomes.value,
|
||||
testForkedParallel :== false,
|
||||
javaOptions :== Nil,
|
||||
sbtPlugin :== false,
|
||||
|
|
|
|||
|
|
@ -271,6 +271,10 @@ object Keys {
|
|||
val outputStrategy = settingKey[Option[sbt.OutputStrategy]]("Selects how to log output when running a main class.").withRank(DSetting)
|
||||
val connectInput = settingKey[Boolean]("If true, connects standard input when running a main class forked.").withRank(CSetting)
|
||||
val javaHome = settingKey[Option[File]]("Selects the Java installation used for compiling and forking. If None, uses the Java installation running the build.").withRank(ASetting)
|
||||
val discoveredJavaHomes = settingKey[Map[JavaVersion, File]]("Discovered Java home directories")
|
||||
val javaHomes = settingKey[Map[JavaVersion, File]]("The user-defined additional Java home directories")
|
||||
val fullJavaHomes = taskKey[Map[JavaVersion, File]]("Combines discoveredJavaHomes and custom javaHomes.").withRank(CTask)
|
||||
|
||||
val javaOptions = taskKey[Seq[String]]("Options passed to a new JVM when forking.").withRank(BPlusTask)
|
||||
val envVars = taskKey[Map[String, String]]("Environment variables used when forking a new JVM").withRank(BTask)
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* sbt
|
||||
* Copyright 2011 - 2017, Lightbend, Inc.
|
||||
* Copyright 2008 - 2010, Mark Harrah
|
||||
* Licensed under BSD-3-Clause license (see LICENSE)
|
||||
*/
|
||||
|
||||
package sbt
|
||||
package internal
|
||||
|
||||
import java.io.File
|
||||
import scala.collection.immutable.ListMap
|
||||
import sbt.io.IO
|
||||
import sbt.io.syntax._
|
||||
|
||||
private[sbt] object CrossJava {
|
||||
def discoverJavaHomes: ListMap[JavaVersion, File] = {
|
||||
val configs = Vector(JavaDiscoverConfig.linux, JavaDiscoverConfig.macOS)
|
||||
ListMap(configs flatMap { _.javaHomes }: _*)
|
||||
}
|
||||
|
||||
sealed trait JavaDiscoverConf {
|
||||
def javaHomes: Vector[(JavaVersion, File)]
|
||||
}
|
||||
|
||||
object JavaDiscoverConfig {
|
||||
val linux = new JavaDiscoverConf {
|
||||
val base: File = file("/usr") / "lib" / "jvm"
|
||||
val JavaHomeDir = """java-([0-9]+)-.*""".r
|
||||
def javaHomes: Vector[(JavaVersion, File)] =
|
||||
wrapNull(base.list()).collect {
|
||||
case dir @ JavaHomeDir(ver) => JavaVersion(ver) -> (base / dir)
|
||||
}
|
||||
}
|
||||
|
||||
val macOS = new JavaDiscoverConf {
|
||||
val base: File = file("/Library") / "Java" / "JavaVirtualMachines"
|
||||
val JavaHomeDir = """jdk-?(1\.)?([0-9]+).*""".r
|
||||
def javaHomes: Vector[(JavaVersion, File)] =
|
||||
wrapNull(base.list()).collect {
|
||||
case dir @ JavaHomeDir(m, n) =>
|
||||
JavaVersion(n) -> (base / dir / "Contents" / "Home")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def wrapNull(a: Array[String]): Vector[String] =
|
||||
if (a eq null) Vector()
|
||||
else a.toVector
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
Global / javaHomes += JavaVersion("6") -> file("/good/old/times/java-6")
|
||||
|
||||
TaskKey[Unit]("check") := {
|
||||
assert(fullJavaHomes.value(JavaVersion("6")).getAbsolutePath.contains("java-6"))
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
> check
|
||||
Loading…
Reference in New Issue