feat: Add multi java lts support. (#1054)
* feat: Add multi java lts support. * Simplify the code --------- Co-authored-by: JingZhang Chen <iRoiocam@gmail.com>
This commit is contained in:
parent
d55350e138
commit
bcec7c0fa0
5 changed files with 93 additions and 50 deletions
|
|
@ -1,33 +1,38 @@
|
||||||
|
package docs.actors.classical;
|
||||||
// #pattern-matching
|
// #pattern-matching
|
||||||
|
|
||||||
static class OptimizedActorWithJava21 extends UntypedAbstractActor {
|
import org.apache.pekko.actor.UntypedAbstractActor;
|
||||||
public static class Msg1 {}
|
|
||||||
|
|
||||||
public static class Msg2 {}
|
public class OptimizedActorWithJava21 extends UntypedAbstractActor {
|
||||||
|
public static class Msg1 {
|
||||||
public static class Msg3 {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onReceive(Object msg) throws Exception {
|
|
||||||
switch(msg) {
|
|
||||||
case Msg1 msg -> receiveMsg1((Msg1) msg);
|
|
||||||
case Msg2 msg -> receiveMsg2((Msg2) msg);
|
|
||||||
case Msg3 msg -> receiveMsg3((Msg3) msg);
|
|
||||||
default _ -> unhandled(msg);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private void receiveMsg1(Msg1 msg) {
|
public static class Msg2 {
|
||||||
// actual work
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private void receiveMsg2(Msg2 msg) {
|
public static class Msg3 {
|
||||||
// actual work
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private void receiveMsg3(Msg3 msg) {
|
@Override
|
||||||
// actual work
|
public void onReceive(Object msg) throws Exception {
|
||||||
}
|
switch (msg) {
|
||||||
|
case Msg1 msg1 -> receiveMsg1(msg1);
|
||||||
|
case Msg2 msg2 -> receiveMsg2(msg2);
|
||||||
|
case Msg3 msg3 -> receiveMsg3(msg3);
|
||||||
|
default -> unhandled(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void receiveMsg1(Msg1 msg) {
|
||||||
|
// actual work
|
||||||
|
}
|
||||||
|
|
||||||
|
private void receiveMsg2(Msg2 msg) {
|
||||||
|
// actual work
|
||||||
|
}
|
||||||
|
|
||||||
|
private void receiveMsg3(Msg3 msg) {
|
||||||
|
// actual work
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// #pattern-matching
|
// #pattern-matching
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import de.heikoseeberger.sbtheader.HeaderPlugin.autoImport.headerSources
|
import de.heikoseeberger.sbtheader.HeaderPlugin.autoImport.headerSources
|
||||||
import sbt.Keys.sourceDirectory
|
|
||||||
import sbt.{ Compile, Def, Test, _ }
|
import sbt.{ Compile, Def, Test, _ }
|
||||||
|
|
||||||
object CopyrightHeaderForJdk9 extends AutoPlugin {
|
object CopyrightHeaderForJdk9 extends AutoPlugin {
|
||||||
|
|
@ -20,16 +19,18 @@ object CopyrightHeaderForJdk9 extends AutoPlugin {
|
||||||
override lazy val requires = CopyrightHeader && Jdk9
|
override lazy val requires = CopyrightHeader && Jdk9
|
||||||
override lazy val trigger = allRequirements
|
override lazy val trigger = allRequirements
|
||||||
|
|
||||||
override lazy val projectSettings: Seq[Def.Setting[_]] = {
|
private lazy val additionalFiles = Def.setting {
|
||||||
import Jdk9._
|
import Jdk9._
|
||||||
Seq(
|
for {
|
||||||
Compile / headerSources ++=
|
dir <- additionalSourceDirectories.value ++ additionalTestSourceDirectories.value
|
||||||
(((Compile / sourceDirectory).value / SCALA_SOURCE_DIRECTORY) ** "*.scala").get,
|
language <- List("java", "scala")
|
||||||
Test / headerSources ++=
|
file <- (dir ** s"*.$language").get
|
||||||
(((Test / sourceDirectory).value / SCALA_TEST_SOURCE_DIRECTORY) ** "*.scala").get,
|
} yield file
|
||||||
Compile / headerSources ++=
|
}
|
||||||
(((Compile / sourceDirectory).value / JAVA_SOURCE_DIRECTORY) ** "*.java").get,
|
|
||||||
Test / headerSources ++=
|
override lazy val projectSettings: Seq[Def.Setting[_]] = {
|
||||||
(((Test / sourceDirectory).value / JAVA_TEST_SOURCE_DIRECTORY) ** "*.java").get)
|
|
||||||
|
Seq(Compile / headerSources ++= additionalFiles.value,
|
||||||
|
Test / headerSources ++= additionalFiles.value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,36 +11,60 @@
|
||||||
* Copyright (C) 2017-2022 Lightbend Inc. <https://www.lightbend.com>
|
* Copyright (C) 2017-2022 Lightbend Inc. <https://www.lightbend.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import sbt._
|
|
||||||
import sbt.Keys._
|
import sbt.Keys._
|
||||||
|
import sbt._
|
||||||
|
|
||||||
object Jdk9 extends AutoPlugin {
|
object Jdk9 extends AutoPlugin {
|
||||||
import JdkOptions.notOnJdk8
|
import JdkOptions.notOnJdk8
|
||||||
|
|
||||||
|
// The version 9 is special for any Java versions >= 9
|
||||||
|
// and the version 11 is special for any Java versions >= 11
|
||||||
|
// and the version 17 is special for any Java versions >= 17
|
||||||
|
// and the version 21 is special for any Java versions >= 21
|
||||||
|
private val supportedJavaLTSVersions = List("9", "11", "17", "21")
|
||||||
|
|
||||||
lazy val CompileJdk9 = config("CompileJdk9").extend(Compile)
|
lazy val CompileJdk9 = config("CompileJdk9").extend(Compile)
|
||||||
|
|
||||||
lazy val TestJdk9 = config("TestJdk9").extend(Test).extend(CompileJdk9)
|
lazy val TestJdk9 = config("TestJdk9").extend(Test).extend(CompileJdk9)
|
||||||
|
|
||||||
val SCALA_SOURCE_DIRECTORY = "scala-jdk-9"
|
lazy val ScalaSourceDirectories: Seq[String] = getAdditionalSourceDirectoryNames("scala")
|
||||||
val SCALA_TEST_SOURCE_DIRECTORY = "scala-jdk9-only"
|
lazy val ScalaTestSourceDirectories: Seq[String] = getAdditionalSourceDirectoryNames("scala", isTest = true)
|
||||||
val JAVA_SOURCE_DIRECTORY = "java-jdk-9"
|
|
||||||
val JAVA_TEST_SOURCE_DIRECTORY = "java-jdk9-only"
|
lazy val JavaSourceDirectories: Seq[String] = getAdditionalSourceDirectoryNames("java")
|
||||||
|
lazy val JavaTestSourceDirectories: Seq[String] = getAdditionalSourceDirectoryNames("java", isTest = true)
|
||||||
|
|
||||||
|
lazy val additionalSourceDirectories =
|
||||||
|
getAdditionalSourceDirectories(Compile, ScalaSourceDirectories ++ JavaSourceDirectories)
|
||||||
|
|
||||||
|
lazy val additionalTestSourceDirectories =
|
||||||
|
getAdditionalSourceDirectories(Test, ScalaTestSourceDirectories ++ JavaTestSourceDirectories)
|
||||||
|
|
||||||
|
private def getAdditionalSourceDirectoryNames(language: String, isTest: Boolean = false): Seq[String] = {
|
||||||
|
for {
|
||||||
|
version <- supportedJavaLTSVersions if version.toInt <= JdkOptions.JavaVersion.majorVersion
|
||||||
|
} yield {
|
||||||
|
if (isTest) {
|
||||||
|
s"$language-jdk$version-only"
|
||||||
|
} else {
|
||||||
|
s"$language-jdk-$version"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private def getAdditionalSourceDirectories(task: Configuration, sourceDirectoryNames: Seq[String]) = Def.setting {
|
||||||
|
for (sourceDirectoryName <- sourceDirectoryNames)
|
||||||
|
yield (task / sourceDirectory).value / sourceDirectoryName
|
||||||
|
}
|
||||||
|
|
||||||
lazy val compileJdk9Settings = Seq(
|
lazy val compileJdk9Settings = Seq(
|
||||||
// following the scala-2.12, scala-sbt-1.0, ... convention
|
// following the scala-2.12, scala-sbt-1.0, ... convention
|
||||||
unmanagedSourceDirectories := notOnJdk8(
|
unmanagedSourceDirectories := notOnJdk8(additionalSourceDirectories.value),
|
||||||
Seq(
|
|
||||||
(Compile / sourceDirectory).value / SCALA_SOURCE_DIRECTORY,
|
|
||||||
(Compile / sourceDirectory).value / JAVA_SOURCE_DIRECTORY)),
|
|
||||||
scalacOptions := PekkoBuild.DefaultScalacOptions.value ++ notOnJdk8(Seq("-release", "11")),
|
scalacOptions := PekkoBuild.DefaultScalacOptions.value ++ notOnJdk8(Seq("-release", "11")),
|
||||||
javacOptions := PekkoBuild.DefaultJavacOptions ++ notOnJdk8(Seq("--release", "11")))
|
javacOptions := PekkoBuild.DefaultJavacOptions ++ notOnJdk8(Seq("--release", "11")))
|
||||||
|
|
||||||
lazy val testJdk9Settings = Seq(
|
lazy val testJdk9Settings = Seq(
|
||||||
// following the scala-2.12, scala-sbt-1.0, ... convention
|
// following the scala-2.12, scala-sbt-1.0, ... convention
|
||||||
unmanagedSourceDirectories := notOnJdk8(
|
unmanagedSourceDirectories := notOnJdk8(additionalTestSourceDirectories.value),
|
||||||
Seq(
|
|
||||||
(Test / sourceDirectory).value / SCALA_TEST_SOURCE_DIRECTORY,
|
|
||||||
(Test / sourceDirectory).value / JAVA_TEST_SOURCE_DIRECTORY)),
|
|
||||||
scalacOptions := PekkoBuild.DefaultScalacOptions.value ++ notOnJdk8(Seq("-release", "11")),
|
scalacOptions := PekkoBuild.DefaultScalacOptions.value ++ notOnJdk8(Seq("-release", "11")),
|
||||||
javacOptions := PekkoBuild.DefaultJavacOptions ++ notOnJdk8(Seq("--release", "11")),
|
javacOptions := PekkoBuild.DefaultJavacOptions ++ notOnJdk8(Seq("--release", "11")),
|
||||||
compile := compile.dependsOn(CompileJdk9 / compile).value,
|
compile := compile.dependsOn(CompileJdk9 / compile).value,
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,19 @@ object JdkOptions extends AutoPlugin {
|
||||||
|
|
||||||
lazy val specificationVersion: String = sys.props("java.specification.version")
|
lazy val specificationVersion: String = sys.props("java.specification.version")
|
||||||
|
|
||||||
|
object JavaVersion {
|
||||||
|
val majorVersion: Int = {
|
||||||
|
// FIXME replace with Runtime.version() when we no longer support Java 8
|
||||||
|
// See Oracle section 1.5.3 at:
|
||||||
|
// https://docs.oracle.com/javase/8/docs/technotes/guides/versioning/spec/versioning2.html
|
||||||
|
val version = specificationVersion.split('.')
|
||||||
|
val majorString =
|
||||||
|
if (version(0) == "1") version(1) // Java 8 will be 1.8
|
||||||
|
else version(0) // later will be 9, 10, 11 etc
|
||||||
|
majorString.toInt
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
lazy val isJdk8: Boolean =
|
lazy val isJdk8: Boolean =
|
||||||
VersionNumber(specificationVersion).matchesSemVer(SemanticSelector(s"=1.8"))
|
VersionNumber(specificationVersion).matchesSemVer(SemanticSelector(s"=1.8"))
|
||||||
lazy val isJdk11orHigher: Boolean =
|
lazy val isJdk11orHigher: Boolean =
|
||||||
|
|
|
||||||
|
|
@ -19,9 +19,9 @@ import sbt.ConsoleLogger
|
||||||
class ProjectFileIgnoreSupport(ignoreConfigFile: File, descriptor: String) {
|
class ProjectFileIgnoreSupport(ignoreConfigFile: File, descriptor: String) {
|
||||||
private lazy val stdoutLogger = ConsoleLogger(System.out)
|
private lazy val stdoutLogger = ConsoleLogger(System.out)
|
||||||
|
|
||||||
private val javaSourceDirectories = Set("java", Jdk9.JAVA_SOURCE_DIRECTORY, Jdk9.JAVA_TEST_SOURCE_DIRECTORY)
|
private val javaSourceDirectories = Set("java") ++ Jdk9.JavaSourceDirectories ++ Jdk9.JavaTestSourceDirectories
|
||||||
|
|
||||||
private val scalaSourceDirectories = Set("scala", Jdk9.SCALA_SOURCE_DIRECTORY, Jdk9.SCALA_TEST_SOURCE_DIRECTORY)
|
private val scalaSourceDirectories = Set("scala") ++ Jdk9.ScalaSourceDirectories ++ Jdk9.ScalaTestSourceDirectories
|
||||||
|
|
||||||
private lazy val ignoreConfig = {
|
private lazy val ignoreConfig = {
|
||||||
require(
|
require(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue